Android实现来电自动挂断实现机制
来源:互联网 发布:淘宝购物优惠券公众号 编辑:程序博客网 时间:2024/04/30 05:05
通过aidl及反射实现挂断电话
具体分三步:
(1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件(构建后在gen下有ITelephony.java文件,这是aidl生成的接口),文件内容如下:
package com.android.internal.telephony;
interface ITelephony{
boolean endCall();
void answerRingingCall();
}
(2)在需要的类中添加如下方法,代码如下(通过反射获取电话接口的实例)
/**
* @param context
* @return
*/
private static ITelephony getITelephony(Context context) {
TelephonyManager mTelephonyManager = (TelephonyManager) context
.getSystemService(TELEPHONY_SERVICE);
Class<TelephonyManager> c = TelephonyManager.class;
Method getITelephonyMethod = null;
try {
getITelephonyMethod = c.getDeclaredMethod("getITelephony",
(Class[]) null); // 获取声明的方法
getITelephonyMethod.setAccessible(true);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(
mTelephonyManager, (Object[]) null); // 获取实例
return iTelephony;
} catch (Exception e) {
e.printStackTrace();
}
return iTelephony;
}
(3)在来电时调用此实例,然后调用此endCall()方法。
mTelephonyManager = (TelephonyManager) this
.getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_STATE);
//电话实例
PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING :
iTelephony = getITelephony(getApplicationContext()); //获取电话接口
if (iTelephony != null) {
try {
iTelephony.endCall(); // 挂断电话
Toast.makeText(getApplicationContext(),
"endCall "+ incomingNumber +" successful!", 3000).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
break;
default :
break;
}
}
};
//注意:在功能清单文件中添加电话的权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
================实例使用如下
TelephonyManager manger=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
manger.listen(new MyphoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
//电话状态监听类
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
db=Mydb_blacklist.getDB(getApplicationContext());
if(isBlacklist(incomingNumber)){
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
// 获取远程TELEPHONY_SERVICE的IBinder对象的代理
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
// 将IBinder对象的代理转换为ITelephony对象
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
// 挂断电话
telephony.endCall();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
- Android实现来电自动挂断实现机制
- 文章标题android来电通过广播实现电话自动挂断
- android 自动挂断来电
- Android开发之来电电话挂断实现
- 来电拦截、来电挂断,通过反射实现一键挂断
- android 来电自动接听和自动挂断
- android 来电自动接听和自动挂断
- android 来电自动接听和自动挂断
- Android开发之黑名单来电自动挂断
- Android黑名单自动挂断来电(AIDL)
- Android电话设置黑名单,来电自动挂断
- 黑名单来电自动挂断
- 黑名单来电自动挂断
- android低版本自动接听/挂断实现
- android 来电自动接听和自动挂断(2.3以上)
- Android-实现电话自动接听/电话自动挂断功能
- 实现android自动接听来电功能
- Android自动挂断来电(ITelephony的使用)
- 堆和栈
- BrainSpace:跟传统搜索说再见
- 构造函数的构造顺序
- HDU 4738 双连通模版题
- iptables IP转发
- Android实现来电自动挂断实现机制
- EditText
- hdu 4738 Caocao's Bridges
- Objective-C就是一个C、C++和Java的杂交体
- Java根据图片建立不规则窗体详解
- RedHat Enterprise Linux 6.4使用Centos 6 的yum源
- C#托管代码与C++非托管代码互相调用
- HDU 4739 求正方形个数
- C# 关键字extern用法