サイレント/バイブレーションから通常の着信音モードに移行できるアプリがありますが、元のモードに戻そうとすると、常にサイレント モードになります。誰でも理由がわかりますか?
まず、checkCurrentSoundState() を使用して現在のリング状態を整数として保存し、通話が終了したときにモバイルをそこに保存した状態に戻そうとしますが、通話が終了するまでに、保存した値はなくなり、 0 にリセットされました。この問題を解決するための良いヒントはありますか?
@Override
public void onReceive(Context context, Intent intent) {
AudioManager maudio = (AudioManager) context.getSystemService(context.AUDIO_SERVICE);
this.context = context;
bundle = intent.getExtras();
if (bundle == null)
return;
state = bundle.getString(TelephonyManager.EXTRA_STATE);
Log.i("IncomingCall", "State: " + state);
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING) || TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals("EXTRA_STATE_RINGING")) {
checkCurrentSoundState();
setupDatabase();
Bundle bundle = intent.getExtras();
String phoneNr = bundle.getString("incoming_number");
for (int i = 0; i < allowedThrough.size(); i++) {
if (PhoneNumberUtils.compare(allowedThrough.get(i), phoneNr)){
goToNormal();
}
}
}
System.out.println("current ringstate is now " + ringcheck);
if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK))
returnToPreviousState();
}
private void checkCurrentSoundState() {
AudioManager maudio = (AudioManager) context.getSystemService(context.AUDIO_SERVICE);
ringcheck = maudio.getRingerMode();
}
private void returnToPreviousState() {
AudioManager maudio = (AudioManager) context.getSystemService(context.AUDIO_SERVICE);
if (ringcheck == AudioManager.RINGER_MODE_SILENT)
maudio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
else if (ringcheck == AudioManager.RINGER_MODE_NORMAL)
maudio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
else if (ringcheck == AudioManager.RINGER_MODE_VIBRATE)
maudio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}