アプリケーションが動作していない場合でも、ブロードキャスト レシーバーは引き続き実行されます。
例として、私は 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);
}