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);
方法,请确保您正在调用以注销接收器。
有了这个 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
的 oncreateIntentFilter 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);
方法,请确保您正在调用以注销接收器。