【Android】Service中判断当前是否全屏(状态栏是否隐藏)
16lz
2021-01-26
转载请注明来源:http://blog.csdn.net/pur_e/article/details/50781412
业务需要,要在后台Service中判断当前界面是否全屏,感谢Google,帮我找到了一个解决方式:is it possible to detect when any application is in full screen in android?,现将方法研究并记录一下。
1.原理
上面的回答中,创建了一个overlay的不可见View,靠在窗口上方,通过调用View.getLocationOnScreen判断其中Y轴位置的值,来判断是否全屏,经过测试,完全可行。
2.测试
先上测试图:
可以明显看到,创建的View确实是会随状态栏隐藏和显示而上下移动的。测试代码:
public class MyService extends Service { private View mCheckFullScreenView = null; @Override public void onCreate() { super.onCreate(); Context ctx = getApplicationContext(); mCheckFullScreenView = new View(ctx); mCheckFullScreenView.setBackgroundColor(Color.RED); WindowManager windowManager = (WindowManager)ctx.getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); //创建非模态、不可碰触 params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; //放在左上角 params.gravity = Gravity.START | Gravity.TOP; params.height = 50; params.width = 50; //设置弹出View类型 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; windowManager.addView(mCheckFullScreenView, params); }}public class MainActivity extends Activity implements View.OnTouchListener{ private boolean isFullScreen = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); View rootView = findViewById(R.id.root); Intent intent = new Intent(this, MyService.class); startService(intent); rootView.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { Window window = getWindow(); if(isFullScreen){ //设置非全屏 window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); }else{ //设置全屏 window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } isFullScreen = !isFullScreen; return false; }}
- 那么其他弹出类型也会如此吗,做了下测试:
TYPE_SYSTEM_OVERLAY:可以 TYPE_SYSTEM_ERROR:可以 TYPE_PHONE:可以 TYPE_SYSTEM_ALERT:不可以 TYPE_TOAST:不可以
- PS:小米的MIUI等自定义的ROM,虽然默认不会显示弹屏,但这个功能是可用的。也就是说这里的不显示,其实是隐藏,而不是直接禁止。
更多相关文章
- Android(安卓)Studio如何更改JDK和SDK的路径?
- android中checkbox的padding引发的问题
- Android(安卓)学习记录-SQLite
- Android(安卓)studio 百度地图开发(2)地图定位
- android AndroidManifest.xml文件解析
- Android(安卓)Dialog Activity
- Android权限总结
- Android布局管理(4)
- Android开发之MediaPlayer使用