Android BroadcastReceiver开始活动
问题描述:
使用此BroadcastReceiver,我可以在每次设备屏幕关闭时启动活动。唯一的问题是相同的活动开始2次。我不明白的问题Android BroadcastReceiver开始活动
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);
}
}
}
起动接收到的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);
方法,请确保您正在拨打注销接收方的电话。
+0
你说得对。非常感谢 –
你是否在活动的生命周期中注册/注销接收者? – denispyr