我的广播接收器获得,如果我的应用程序无法正常运行,甚至(My Broadcast receiver

2019-10-17 05:14发布

我的广播接收装置,仍然得到执行,即使我的应用程序无法正常工作。

作为一个例子,我使用android.intent.action.NEW_OUTGOING_CALL检查呼出和比我停止音乐和推送通知..但即使我闭上我的应用程序,并杀死所有的任务,如果我叫比我得到我的应用程序的通知后。所以如何管理时,我用我的应用程序来工作,我的广播。 我已经装箱服务播放音乐和2广播接收文件传入和传出。 帮助解决这个问题。

此外,我怎么能毁了我与运行服务的背后如果用户按下退出键的应用程序。 **更新,现在我做编辑它和它的工作fine..thank你这么多,你的所有

这里是我的代码

<activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />


            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
          </activity>

    <receiver android:name="OutgoingCallInterceptor">                          
        <intent-filter android:priority="1">                                  
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
        </intent-filter>
    </receiver>

    <receiver android:name="IncomingCallInterceptor">                          
        <intent-filter android:priority="1">                                  
            <action android:name="android.intent.action.PHONE_STATE" />  
            <action android:name="android.media.AUDIO_BECOMING_NOISY" />

        </intent-filter>
    </receiver>

更新大家都建议我我已经接收到主类文件,并从那里注册了,但它不会工作

public class MainActivity extends Activity {
RemoteViews layout;
int SDK_INT;
 BroadcastReceiver br;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     IntentFilter filter = new IntentFilter("android.media.AUDIO_BECOMING_NOISY");
     this.registerReceiver(br, filter);
     setContentView(R.layout.activity_main);
         SDK_INT = android.os.Build.VERSION.SDK_INT;
        System.out.println(SDK_INT);
        Button start = (Button)findViewById(R.id.play);
        Button stop = (Button)findViewById(R.id.stop); 
        start.setOnClickListener(startListener);
        stop.setOnClickListener(stopListener);
        br = new BroadcastReceiver() {  
            @Override
            public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                 if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
context.stopService(new Intent(context, myPlayService.class));
                        Toast.makeText(context, "Headphones disconnected.", Toast.LENGTH_SHORT).show();
                 }
            }  }
        };

@Override   
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(br);
}

Answer 1:

一个例子:广播reciver如何注册和未注册的变化根据自己的需要“我希望的代码是自我解释”

 private final BroadcastReceiver xyz= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
//ur reciver
 }
  protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

IntentFilter filter = new IntentFilter(ACTION);//ur action
this.registerReceiver(xyz, filter);
}

@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(xyz);
 }


Answer 2:

您需要申报的onResume unregisterReceiver()(),或在onPause()方法。 这将解决您的问题。



Answer 3:

第一:

使用unregisterReceiver()中的onPause()和在在onStart重新注册()。

它总是更好,如果你想提供的功能,只有当你的应用更新为在本地注册的接收器。

第二:

结合之后使用服务,不调用unBind而退出应用程序会为您的服务活着即使你的应用程序已关闭。 我猜你是在本地启动该服务。 通过结合它启动服务。

希望这将解决您的问题。



文章来源: My Broadcast receiver get execute even if my application is not working