当前位置:操作系统 > 安卓/Android >>

Android 静音与振动

1,设置静音和振动
静音和振动都属于来电后的动作.所以在设置静音和振动时都只是设置一些标识,并往数据库写入相应标识.
文件:packages/apps/settings/src/com/android/settings/SoundAndDisplaySettings.java

[java]
<SPAN style="COLOR: #993300">private CheckBoxPreference mSilent; 
 
private CheckBoxPreference mVibrate; 
 
private void setRingerMode(boolean silent, boolean vibrate) { 
 
        if (silent) { 
 
            mAudioManager.setRingerMode(vibrate ? AudioManager.RINGER_MODE_VIBRATE : 
 
                AudioManager.RINGER_MODE_SILENT); 
 
        } else { 
 
            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
 
            mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
 
                    vibrate ? AudioManager.VIBRATE_SETTING_ON 
 
                            : AudioManager.VIBRATE_SETTING_OFF); 
 
        } 
 
    } 
 
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 
 
        if (preference == mSilent || preference == mVibrate) { 
 
            setRingerMode(mSilent.isChecked(), mVibrate.isChecked()); 
 
            if (preference == mSilent) updateState(false); 
 
        }</SPAN> 

private CheckBoxPreference mSilent;

private CheckBoxPreference mVibrate;

private void setRingerMode(boolean silent, boolean vibrate) {

        if (silent) {

            mAudioManager.setRingerMode(vibrate ? AudioManager.RINGER_MODE_VIBRATE :

                AudioManager.RINGER_MODE_SILENT);

        } else {

            mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

            mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,

                    vibrate ? AudioManager.VIBRATE_SETTING_ON

                            : AudioManager.VIBRATE_SETTING_OFF);

        }

    }

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

        if (preference == mSilent || preference == mVibrate) {

            setRingerMode(mSilent.isChecked(), mVibrate.isChecked());

            if (preference == mSilent) updateState(false);

        }

静音和振动是复选框按钮,两个中有一个发生变化时调用setRingerMode对状态进行设置;如下状态描术:

RINGER_MODE_SILENT 静音,且无振动

RINGER_MODE_VIBRATE 静音,但有振动

RINGER_MODE_NORMAL 正常声音,振动开关由setVibrateSetting决定.

铃响模式的设置是通过mAudioManager(音频管理器)来实现的.

2 音频管理器服务
mAudioManager所在服务如下:

文件: frameworks/base/media/java/android/media/AudioManager.java

[java] 
<SPAN style="COLOR: #993300"> public static final int RINGER_MODE_SILENT = 0; 
 
    public static final int RINGER_MODE_VIBRATE = 1; 
 
    public static final int RINGER_MODE_NORMAL = 2; 
 
public void setRingerMode(int ringerMode) { 
 
        IAudioService service = getService(); 
 
        try { 
 
            service.setRingerMode(ringerMode); 
 
        } catch (RemoteException e) { 
 
            Log.e(TAG, "Dead object in setRingerMode", e); 
 
        } 
 
}</SPAN> 

 public static final int RINGER_MODE_SILENT = 0;

    public static final int RINGER_MODE_VIBRATE = 1;

    public static final int RINGER_MODE_NORMAL = 2;

public void setRingerMode(int ringerMode) {

        IAudioService service = getService();

        try {

            service.setRingerMode(ringerMode);

        } catch (RemoteException e) {

            Log.e(TAG, "Dead object in setRingerMode", e);

        }

}
将铃响模式值传给音频接口服务IaudioService[java] view plaincopyprint?
<SPAN style="COLOR: #993300">public static final int VIBRATE_TYPE_RINGER = 0; 
 
    public static final int VIBRATE_TYPE_NOTIFICATION = 1; 
 
    public static final int VIBRATE_SETTING_OFF = 0; 
 
    public static final int VIBRATE_SETTING_ON = 1; 
 
    public static final int VIBRATE_SETTING_ONLY_SILENT = 2; 
 
public void setVibrateSetting(int vibrateTyp  , int vibrateSetting) { 
 
        IAudioService service = getService(); 
 
        try { 
 
            service.setVibrateSetting(vibrateType, vibrateSetting); 
 
        } catch (RemoteException e) { 
 
            Log.e(TAG, "Dead object in setVibrateSetting", e); 
 
        } 
 
}</SPAN> 

public static final int VIBRATE_TYPE_RINGER = 0;

    public static final int VIBRATE_TYPE_NOTIFICATION = 1;

    public static final i

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,