我正在开发一个允许用户将数字添加到黑名单的android。当传入的号码与黑名单中的号码匹配时,即使电话短暂响铃然后断开呼叫,也应该拒绝该呼叫。
我发现包括在SO上的一切,如果没有在我创建的com.android.internal.telephony中创建AIDL就无法完成,但我无法添加修改手机状态权限,因为它说它需要是一个系统应用程序。
我正在向上瞄准ICS,我看到其他应用程序在ICS中阻止了呼叫,所以这是怎么做到的。我还尝试将修改手机状态权限添加到清单文件中,并显示一条错误,说它仅适用于系统应用程序,因此如何解决此问题。我不希望应用程序必须扎根。
感谢您提供的任何帮助
答案 0 :(得分:3)
我找到了一点运气的答案。
而不是添加权限MODIFY_PHONE_STATE
添加权限CALL_PHONE
创建一个名为com.android.internal.telephony
在此软件包中创建一个名为ITelephony.aidl
的文件,并添加以下内容
包com.android.internal.telephony;
interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
使用以下代码阻止通话
try
{
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
com.android.internal.telephony.ITelephony telephonyService = (ITelephony)m.invoke(tm);
//telephonyService.silenceRinger();
telephonyService.endCall();
}
catch (Exception e)
{
Log.d("BLOCK CALL", e.toString());
Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
}
希望这有助于其他人,它不容易找到。我不明白为什么谷歌删除了这样做的能力,但没有像这样捣乱。