我正在尝试在 moto g 手机上捕获屏幕开/关事件。主要活动有
Intent intentscreen = new Intent(getApplicationContext(), ScreenService.class);
startService(intentscreen);
其中“ScreenService”看起来像:
public int onStartCommand(Intent intent, int flags, int startId)
{
if (intent!=null)
{
super.onCreate();
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock");
if(!wifiLock.isHeld()){
wifiLock.acquire();
}
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
registerReceiver(this.mybroadcast, filter);
return super.onStartCommand(intent, flags, startId);
}
return START_STICKY;
}
@Override
public void onDestroy()
{
super.onDestroy();
unregisterReceiver(mybroadcast);
if(wifiLock.isHeld()){
wifiLock.release();
}
}
而接收器类看起来像:
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Screen", "--- I Fire!");
}
}
清单文件有权限,但问题是我的手机在最初的几个小时内收到了事件,然后它停止接收,即Log.d("Screen", "--- I Fire!");
没有显示在我的日志猫中。
还要进一步补充,如果我获得PowerManager.WakeLock wakeLock
它根本不起作用,但如果我获得它WifiLock wifiLock = null
,这可以工作几个小时,有什么建议可以让 Wifi 保持活跃吗?
有什么建议可能是错的吗?或者我应该获得任何其他类型的锁?我不想为锁使用大量电池。