android-studio - Android中如何判断当前屏幕的状态?
黄舟
黄舟 2017-04-17 16:13:26
0
2
459

我想过监听系统广播,可是我在manifest.xml中声明了想要监听的广播类型,然后重写了onReceive()方法,以打印Log的方式检测是否正常工作,然而在控制台发现没有打印出信息。直接上图吧:


黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复 (2)
小葫芦

哥们你想在什么情况下监听屏幕状态啊??

1.如果是要一直监听就得开启服务

Manifest中配置

        

Service

public class PoService extends Service{ int mStartMode; // indicates how to behave if the service is killed IBinder mBinder; // interface for clients that bind boolean mAllowRebind; // indicates whether onRebind should be used private ScreenStatusReceiver mReceiver; @Override public void onCreate() { final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); mReceiver = new ScreenStatusReceiver(); registerReceiver(mReceiver, filter); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // The service is starting, due to a call to startService() return mStartMode; } @Override public IBinder onBind(Intent intent) { // A client is binding to the service with bindService() return mBinder; } @Override public boolean onUnbind(Intent intent) { // All clients have unbound with unbindService() return mAllowRebind; } @Override public void onRebind(Intent intent) { // A client is binding to the service with bindService(), // after onUnbind() has already been called } @Override public void onDestroy() { // The service is no longer used and is being destroyed if (mReceiver != null) { unregisterReceiver(mReceiver); mReceiver = null; } } }

BroadcastReceiver

public class ScreenStatusReceiver extends BroadcastReceiver { public static boolean wasScreenOn = true; @Override public void onReceive(final Context context, final Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { wasScreenOn = false; } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { wasScreenOn = true; } } }

日志

03-16 21:57:22.950 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕关闭 03-16 21:57:23.979 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕点亮 03-16 21:57:26.584 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕关闭 03-16 21:57:28.485 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕点亮 03-16 21:57:31.021 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕关闭 03-16 21:57:32.393 30953-30953/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusReceiver: 屏幕点亮

2.如果不是,给你举个在Activity中获取屏幕状态的栗子

Activity

public class ScreenStatusActivity extends BaseActivity { private BroadcastReceiver mReceiver = null; public static Intent getStartIntent() { Intent intent = new Intent(); intent.setClass(BaseApplication.getApplication(), ScreenStatusActivity.class); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); mReceiver = new ScreenStatusReceiver(); registerReceiver(mReceiver, filter); } @Override protected void onPause() { if (ScreenStatusReceiver.wasScreenOn) { Log.e(ScreenStatusActivity.class.getSimpleName(), "屏幕点亮"); } else { Log.e(ScreenStatusActivity.class.getSimpleName(), "屏幕关闭"); } super.onPause(); } @Override protected void onResume() { super.onResume(); if (ScreenStatusReceiver.wasScreenOn) { Log.e(ScreenStatusActivity.class.getSimpleName(), "屏幕点亮"); } else { Log.e(ScreenStatusActivity.class.getSimpleName(), "屏幕关闭"); } } @Override protected void onDestroy() { if (mReceiver != null) { unregisterReceiver(mReceiver); mReceiver = null; } super.onDestroy(); } }

日志

03-16 21:14:03.112 3803-3803/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusActivity: 屏幕点亮 03-16 21:14:09.583 3803-3803/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusActivity: 屏幕关闭 03-16 21:14:26.686 3803-3803/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusActivity: 屏幕点亮 03-16 21:14:41.576 3803-3803/wang.wangxinarhat.materialdesigncomprehensivesamples E/ScreenStatusActivity: 屏幕关闭

这部分代码放到了github

    左手右手慢动作

    Service中使用广播和Activity一样,onCreate中注册,onDestroy解绑就是了。只是Intent.ACTION_SCREEN_ONIntent.ACTION_SCREEN_OFF这两个广播比较特殊,不能静态注册,只能动态注册,即,你在manifest中注册这个广播监听是不管用的,这就是为什么你自己写的demo打印不出来log的原因。

      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!