startActivity()从BroadcastReceiver的startActivity、BroadcastReceiver

2023-09-12 03:27:29 作者:蒗貓

我试图自动启动我的nightclock应用程序使用的的onPause()方法来实现以下BroadcastReceiver的充电方式:

I am trying to autostart my nightclock application on charging using the following BroadcastReceiver implemented in the onPause() method:

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()方法被解雇了,但活动不会启动。然而,日志显示如下:

The onReceive() method is fired when the USB-cable is plugged in, but the activity doesn't start. However the log shows this:

I/ActivityManager(   79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }

任何想法,为什么日志说,该活动已启动,但没有任何反应?

Any ideas why the log says the activity is started, but nothing happens?

推荐答案

如果你的目标是要 NightClock 来启动每当 ACTION_POWER_CONNECTED 广播发送,您使用的方法一个的BroadcastReceiver 是好的。但是,不要从活动注册。相反,在清单中注册:

If your goal is that you want NightClock to be started whenever an ACTION_POWER_CONNECTED broadcast is sent, your approach of using a BroadcastReceiver is fine. However, do not register it from an activity. Rather, register it in the manifest:

<receiver android:name=".OnPowerReceiver">
        <intent-filter>
                <action android:name="android.intent.action.POWER_CONNECTED" />
        </intent-filter>
</receiver>

然后,让你的的BroadcastReceiver 作为公共Java类(这里命名为 OnPowerReceiver ,但你可以把它叫做什么你想要的),并把它叫 startActivity()

Then, have your BroadcastReceiver as a public Java class (here named OnPowerReceiver, though you can call it whatever you want), and have it call startActivity().

记住,用户可能不希望你这样做。还有许多其他的情况下,一个电话连接到电源除了启动夜钟。我谦恭地建议你干脆让用户可以通过主屏幕启动的活动。

Bear in mind that users probably do not want you doing this. There are many other cases for connecting a phone to power besides starting a "night clock". I humbly suggest you simply let users start your activity via the home screen.

 
精彩推荐