1

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

作为一个例子,我使用 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);
}
4

3 回答 3

2

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

 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);
 }
于 2012-09-14T11:29:27.293 回答
1

您需要在 onResume() 或 onpause() 方法中声明 unregisterReceiver()。这将解决您的问题。

于 2012-09-14T12:09:59.360 回答
0

第一的:

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

如果您只想在应用程序启动时提供功能,最好在本地注册接收器。

第二:

绑定后使用服务并且在退出应用程序时不要调用unBind,即使您的应用程序关闭,您的服务也会保持活动状态。我猜你是在本地启动服务。通过绑定启动服务。

希望这能解决您的问题。

于 2012-09-14T11:24:19.927 回答