您的位置:首页 > 移动开发 > Android开发

Android源码开发之来电接听振动

2015-09-18 14:07 429 查看
在Dialer模块里增加一个接听振动的菜单选项

packages/apps/Dialer/res/xml/general_settings.xml

        <CheckBoxPreference

            android:key="button_vibrate_in_call"

            android:title="@string/vibrate_in_call"

            android:persistent="false"

            android:defaultValue="false" />

packages/apps/Dialer/src/com/android/dialer/settings/GeneralSettingsFragment.java

    private static final String BUTTON_VIBRATE_IN_CALL  = "button_vibrate_in_call";//key值

    private CheckBoxPreference mVibrateWhenCall;

    private static final String PREFER_NAME = "vibrateCall";//sharedpreference name

    private static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE + Context.MODE_MULTI_PROCESS;//sharedpreference  mode

---------

public void onCreate(Bundle savedInstanceState) {

---------

//初始化

mVibrateWhenCall = (CheckBoxPreference) findPreference(BUTTON_VIBRATE_IN_CALL);

if(mVibrateWhenCall != null){

            mVibrateWhenCall.setOnPreferenceChangeListener(this);
   SharedPreferences share = mContext.getSharedPreferences(PREFER_NAME, MODE);  
   boolean isEnable = share.getBoolean("vibratecall", true);
   mVibrateWhenCall.setChecked(isEnable);

        }

------------

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

------

//SharedPreferences 赋值

else if(preference == mVibrateWhenCall){
SharedPreferences share = mContext.getSharedPreferences(PREFER_NAME, MODE);  

        SharedPreferences.Editor editor = share.edit();
if(mVibrateWhenCall.isChecked()){
editor.putBoolean("vibratecall", true);
}else{
editor.putBoolean("vibratecall", false);
}
       editor.commit();

}

电话接通的时候会回调packages/services/Telephony/src/com/android/services/telephony/TelephonyConnection.java的onAnswer()方法

    private Context getTargetContext() throws NameNotFoundException {  

        return getPhone().getContext().createPackageContext("com.android.dialer", Context.CONTEXT_IGNORE_SECURITY);  

    } 

-------------

    @Override

    public void onAnswer(int videoState) {

-------------

        if (getPhone() != null) {
try {  
   SharedPreferences share = getTargetContext().getSharedPreferences(PREFER_NAME,MODE);  
   boolean needVibrate = share.getBoolean("vibratecall", true); 
    Log.v(TelephonyConnection.this, "needVibrate = "+needVibrate);
    if(needVibrate){
Vibrator vbr = (Vibrator) getPhone().getContext().getSystemService(Context.VIBRATOR_SERVICE);
vbr.vibrate(300);//振动
}  
} catch (NameNotFoundException e) {  
   e.printStackTrace();  
   Log.i("callvibrate", "木有找到该包名");  
}
}

这里用到了SharedPreferences 再不同模块之间的读写,参考http://blog.csdn.net/huageshiya/article/details/48544703
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: