我有一个小部件,我想检查屏幕是否已关闭。
我无法使用PowerMananger.isScreenOn,因为我想支持Android 1.5 / 1.6。
所以我尝试在清单中注册SCREEN_ON / SCREEN_OFF操作,但这不起作用。似乎只有registerReceiver适用于那些意图。 (Android - how to receive broadcast intents ACTION_SCREEN_ON/OFF?)
问题是,我应该在哪里注册我的小部件?
我无法在我的小部件中注册屏幕意图接收器,因为您无法从清单中声明的另一个BroadcastReceiver调用registerReceiver。
我想过在我的配置活动的onCreate中调用它。
问题是我没有调用unregisterReceiver,所以我得到了泄漏的例外。
还有其他解决办法吗?
感谢。
答案 0 :(得分:2)
我的解决方案是在AppwidgetProvider子类中的public void onReceive(Context context, Intent intent)
方法中启动服务。像:
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_ENABLED)) {
Intent listenerService=new Intent(context,ScreenMoniterService.class);
startService(listenerService);
return;
}
然后在此服务的public void onCreate()
方法中,注册BroadcastReceiver,并在public void onDestroy()
方法中取消注册。
当然,您应该在删除所有appwidget时停止该服务。
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_DISABLED)) {
Intent listenerService=new Intent(context,ScreenMoniterService.class);
stopService(listenerService);
return;
}
答案 1 :(得分:0)
registerReceiver:
final IntentFilter bcFilter = new IntentFilter();
bcFilter.addAction(Intent.ACTION_SCREEN_ON);
bcFilter.addAction(Intent.ACTION_SCREEN_OFF);
context.getApplicationContext().registerReceiver(this, bcFilter);
unregisterReceiver:
context.getApplicationContext().unregisterReceiver(this);
(就在AppWidgetProvider!)