2017-04-25 202 views
1

使用此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> 
+0

你是否在活动的生命周期中注册/注销接收者? – denispyr

回答

2

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

此外,如果您坚持使用ActivityregisterReceiver(mReceiver, intentFilter);方法,请确保您正在拨打注销接收方的电话。

+0

你说得对。非常感谢 –