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() で再登録します。

アプリが起動しているときにのみ機能を提供したい場合は、レシーバーをローカルで登録することをお勧めします。

2番:

バインド後にサービスを使用しunBind、アプリの終了中に呼び出さないでください。アプリがダウンした後でも、サービスは存続します。ローカルでサービスを開始していると思います。バインドしてサービスを開始します。

これで問題が解決することを願っています。

于 2012-09-14T11:24:19.927 に答える