我正在尝试使用在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/

10-12 04:21