2

少し前に、特定の人が電話をかけるたびに着信モードを変更するアプリを作成しました。そのため、それらのいずれかが電話をかけると、呼び出し音のモードが変更され、電話が最大音量で鳴ります。私が使う

setRingerMode(AudioManager.RINGER_MODE_NORMAL)
am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamMaxVolume(AudioManager.STREAM_RING), 0);

アプリは割り込みフィルターも INTERRUPTION_FILTER_ALL に変更しますが、簡単にするために、おやすみモードが有効になっていないと仮定しましょう。たとえば、電話が振動するように設定されている場合、一致する連絡先からの着信があると、呼び出し音がオンになり、音量が最大に設定されます。

マシュマロ(Nexus 6P)を搭載した電話を入手する前は、すべて正常に機能していました。これで、着信がある場合、アプリは通常どおり呼び出し音のモードと音量を変更しますが、着信には影響しません。着信音の設定が変更されても、同じように動作します。私のアプリが間違いなく変更を行っていることを確認できます。通話が終了した後、呼び出し音量の設定は本来あるべきとおりになっています。そして、別の電話がかかってきた場合、その電話は適切に鳴ります。呼び出しモードの変更が、既に進行中の着信通話に適用されていないようです。

これを引き起こしているマシュマロの変更点と、それを回避する方法があるかどうかについて、誰か提案がありますか?

4

2 に答える 2

2

だから、私はこれを回避する方法を見つけました。このバグを修正する方法 (またはそもそもなぜこのバグが存在するのか) はまだわかりませんが、私の回避策はうまく機能しています。着信モードを変更するように OS に指示することに加えて、デフォルトの着信音を手動で取得し、着信時にアプリで再生しています。

Uri alertUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), alertUri);
if(r != null && !r.isPlaying()){
    r.play();
}

そして、かかってきた電話が鳴らなくなったら、手動で止めRingtoneます。

于 2015-12-11T10:31:19.650 に答える