私はAndroidアプリを書いています.サービス内でブロードキャストレシーバーを実行する必要があります.レシーバーは着信があったことを検出し、通話が終了または応答したときにサービスが電話をサイレントモードにし、レシーバーがいつ検出するかを検出します.着信がある場合、受信者は着信音モードを呼び出し音に設定し、通常どおり振動し、通話に応答するか終了すると、受信者は着信音をサイレントモードに再度設定します。
ここに私の受信機があります:
private final BroadcastReceiver CallReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state))
{
amanager.setRingerMode(2); //Ringer ON
}
if (TelephonyManager.EXTRA_STATE_IDLE.equals(state))
{
amanager.setRingerMode(0); //Ringer Silent
}
if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state))
{
amanager.setRingerMode(0); ////Ringer Silent
}
}
};
私のサービスの onStartCommand メソッド内:
IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(CallReceiver, filter);
サービスは正常に実行されており、受信者は着信があることを検出しますが、その後アプリがクラッシュします。なぜこれが起こっているのですか? あなたの助けに感謝します!
編集:問題を解決しました。マニフェストに間違ったアクションを書いたことがわかりました。変更してもクラッシュしません。
しかし、現在、受信機は着信のみを検出しますが、通話が応答または終了したことを検出しません。数回検出しましたが、ほとんどの場合は検出しません。通話が終了した後もリンガーはオンのままです! 何か案は?