我正在尝试使用在 onPause() 方法中实现的以下 BroadcastReceiver 在充电时自动启动我的夜间时钟应用程序:
BroadcastReceiver test = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this);
Intent i = new Intent(context, NightClock.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
};
registerReceiver(test, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
插入 USB 电缆时会触发 onReceive() 方法,但 Activity 不会启动。然而日志显示了这一点:
I/ActivityManager( 79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }
知道为什么日志显示活动已启动,但没有任何反应吗?
如果您的目标是希望每当发送
NightClock
广播时启动 ACTION_POWER_CONNECTED
,那么使用 BroadcastReceiver
的方法就可以了。但是,不要从活动中注册它。相反,将其注册在清单中:
<receiver android:name=".OnPowerReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
然后,将您的
BroadcastReceiver
作为公共 Java 类(这里命名为 OnPowerReceiver
,尽管您可以随意称呼它),并让它调用 startActivity()
。
请记住,用户可能不希望您这样做。除了启动“夜间时钟”之外,还有许多其他将手机连接到电源的情况。我谦虚地建议您只需让用户通过主屏幕开始您的活动即可。
来自文档:
不要从广播接收器启动活动,因为用户体验会很不和谐;特别是当有多个接收器时。相反,请考虑显示通知。