Android BroadcastReceiver 开始activity

Android BroadcastReceiver start activity

有了这个 BroadcastReceiver,我可以在每次设备屏幕关闭时启动 activity。唯一的问题是相同的 activity 启动了 2 次。我不明白这个问题

public class ScreenReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {    

        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            intent = new Intent(context, Login2.class);
            context.startActivity(intent);               
        }
    }
}

启动接收器进入 activity

的 oncreate
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, intentFilter);

清单

<receiver android:name="utils.ScreenReceiver"
          android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF" />
        <action android:name="android.intent.action.SCREEN_ON" />
    </intent-filter>
</receiver>

您有效地注册了 ScreenReceiver 的两个实例,因此响应了两次,并创建了 Activity 的两个版本。您首先使用清单中应用的 <intent-filter> 在系统范围内注册它。其次,您在调用 registerReceiver(mReceiver, intentFilter); 时注册了 ScreenReceiver 的另一个实例。您应该只使用一种机制来注册您的 BroadcastReceiver.

此外,如果您坚持使用 Activity registerReceiver(mReceiver, intentFilter); 方法,请确保您正在调用以注销接收器。