结束通话后返回上一个RINGER_MODE

时间:2013-07-25 21:21:06

标签: android android-audiomanager

我有一个应用程序,可以带你从静音/振动和正常的铃声模式,但当我试图让你回到我带你离开的模式,我总是在静音模式。谁能明白为什么?

首先我将当前的ringstate存储为带有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);
    }

1 个答案:

答案 0 :(得分: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));
    }