0

サイレント/バイブレーションから通常の着信音モードに移行できるアプリがありますが、元のモードに戻そうとすると、常にサイレント モードになります。誰でも理由がわかりますか?

まず、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);
    }
4

1 に答える 1

1

呼び出し音モードを SharedPreference に保存する必要があります

@Override

public void onReceive(Context context, Intent intent) {

        AudioManager maudio = (AudioManager) context.getSystemService(context.AUDIO_SERVICE);
        SharedPreferences pref = context.getSharedPreferences("app", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        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")) {
            editor.putInt("ringer_mode", maudio.getRingerMode());
            editor.commit();
            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))
            maudio.setRingerMode(pref.getInt("ringer_mode", 0));
    }
于 2013-07-25T21:40:59.453 に答える