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
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
相关文章推荐
- Android Paint
- greenDao的使用--- 配置 androidstudio
- Android多种方式实现自定义Dialog对话框
- Android 仿QQ首页ListView左滑置顶、删除等实现源码
- Android(Lollipop/5.0) Material Design简介
- Android在layout xml中使用include[转]
- Android可移动控件
- Android基础之使用Fragment控制切换多个页面[转]
- Android Studio 快捷键 主键
- Android Studio 快捷键
- android/ios云盘视频教程分享
- android:layout_grovity="bottom" 不起作用
- Android Gradle 基本模板
- Android Studio插件给你带来开发便利
- android5.0开发之解决灭屏来日程只有声音没有亮屏
- android项目源码大全
- 检查Android系统版本
- Android之Notification的多种用法
- android_Pull解析xml
- Android用户新危机间谍软件大起底