android - 即使我的应用程序不工作,我的广播接收器也会执行

标签 android android-layout android-intent

即使我的应用程序不工作,我的广播接收器仍在执行。

例如,我正在使用 android.intent.action.NEW_OUTGOING_CALL 来检查拨出电话,然后我停止播放音乐并推送通知 .. 但即使我关闭我的应用程序并终止所有任务,如果我打电话之后我会收到我的应用程序通知.. 那么,当我使用我的应用程序时,我如何设法进行广播。 我有用于播放音乐的服务和用于传入和传出的 2 个广播接收器文件。 帮助解决这个问题。

此外,如果用户按下退出按钮,我如何销毁我的应用程序,服务在后面运行。 **更新我对其进行了编辑,现在可以正常工作了..非常感谢你们

这是我的代码

<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);
}

最佳答案

示例:如何根据您的需要注册和取消注册广播接收器“我希望代码是不言自明的”

 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);
 }

关于android - 即使我的应用程序不工作,我的广播接收器也会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423271/

相关文章:

java - 如何?编写 Android 应用程序代码以将用户的位置设置更改为关闭?

android - ADB ant debug 安装在多个安卓设备上

android - 致命信号 6 SIGABRT 代码=-6

android - findViewById 在 fragment 中返回 null

android - Recyclerview item点击波纹效果

android - 隐含 Intent 的精确传递

java - Android设置具体时间和在Alarmmanager

android - 如何在 ViewPager 的 fragment 页面上应用 fitSystemWindows?

android-layout - 为什么在使用 Kotlin 中的后退按钮导航到另一个片段并返回后片段中的 EditText 显示相同的值?

安卓在后台播放音乐