您现在的位置:首页 > 博客 > Android开发 > UI开发 > 正文
如何编程实现“拒接来电”?
http://www.drovik.com/      2012-9-6 19:39:26      来源:CSDN社区      点击:

我找到了解决方法:大体是这样的;
1.自己实现一个ITelephony.aidl(源代码copy),eclipse会自动生成一个ITelephony.java ,这是我们就可以使用这个interface了。
2.获得ITelephony:TelephonyManager类中有一个私有方法 private Itelephony getITelephony() 可以获得ITelephony,但是如何使用这个私有方法有一个小技巧,要用到java 的反射机制。简单的过程如下:
获得Class—》Method—-》调用getITelephony.
详细如下:
1. 在src下新建一个包:com.android.internal.telephony(和ITelephony.aidl 中 package 声明的包名一样);
2. 然后从系统源码中把ITelephony.aidl文件拷贝到 com.android.internal.telephony包下。(也可以先新建一个ITelephony.aidl,然后再把内容拷贝进去(ITelephony.aidl文件内容可以在http://www.netmite.com/android/mydroid/1.5/frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl 找到,这个方法适合没有SDK源码文件的开发者));
3. 在src下新建一个包:android.telephony, 然后新建一个NeighboringCellInfo.aidl,其内容为:
package android.telephony;

parcelable NeighboringCellInfo;

4.从私有方法中获取ITelephony: 代码如下。

tManager = (TelephonyManager)
this.getSystemService(Context.TELEPHONY_SERVICE);
//初始化iTelephony
Class <TelephonyManager> c = TelephonyManager.class;
Method getITelephonyMethod = null;
try {
getITelephonyMethod = c.getDeclaredMethod(“getITelephony”, (Class[])null);
getITelephonyMethod.setAccessible(true);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
iTelephony = (ITelephony) getITelephonyMethod.invoke(tManager, (Object[])null);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

(其实android sdk里面的文档是很有帮助的, aidl建立方法不清楚的可以看 里面的文档, )

分享到:
发表评论(0)
姓名 *
评论内容 *
验证码 *图片看不清?点击重新得到验证码