我正在尝试使用在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 }
关于日志为什么说 Activity 已开始但什么都没发生的任何想法?
最佳答案
如果您的目标是每当发送NightClock
广播时都希望启动ACTION_POWER_CONNECTED
,则使用BroadcastReceiver
的方法很好。但是,请勿从 Activity 中注册它。而是在 list 中注册它:
<receiver android:name=".OnPowerReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
然后,将
BroadcastReceiver
作为公共(public)Java类(此处称为OnPowerReceiver
,尽管您可以随意调用它),然后将其称为startActivity()
。请记住,用户可能不希望您这样做。除了启动“夜间时钟”外,还有许多其他情况可以将电话连接到电源。我谦虚地建议您只是让用户通过主屏幕开始您的 Activity 。
关于android - 来自BroadcastReceiver的startActivity(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3849868/