Android 拒绝来电
我正在开发一款android系统,它允许用户将数字添加到黑名单中。当来电号码与黑名单中的号码匹配时,应拒绝接听来电,即使手机确实短暂响铃,然后断开通话 我发现的所有东西,包括SO,都说如果不在我创建的com.android.internal.telephony中创建AIDL,就无法完成,但我无法添加“修改手机状态”权限,因为它说它需要是一个系统应用程序 我的目标是ICS向上,我见过其他应用程序阻止ICS和向上的呼叫,那么这是如何做到的。我还尝试将“修改手机状态”权限添加到清单文件中,但它显示一个错误,表示该权限仅适用于系统应用程序,因此如何解决此问题。我不希望应用程序必须是根Android 拒绝来电,android,Android,我正在开发一款android系统,它允许用户将数字添加到黑名单中。当来电号码与黑名单中的号码匹配时,应拒绝接听来电,即使手机确实短暂响铃,然后断开通话 我发现的所有东西,包括SO,都说如果不在我创建的com.android.internal.telephony中创建AIDL,就无法完成,但我无法添加“修改手机状态”权限,因为它说它需要是一个系统应用程序 我的目标是ICS向上,我见过其他应用程序阻止ICS和向上的呼叫,那么这是如何做到的。我还尝试将“修改手机状态”权限添加到清单文件中,但它显示一个
感谢您提供的帮助我幸运地找到了答案 而不是添加权限
MODIFY\u PHONE\u STATE
add permissionCALL\u 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();
}
希望这有助于其他人,它不太容易找到。我不明白谷歌为什么不这样胡闹就取消了这项功能 也许这个线程可以帮助你@MatthewFisher不幸的是,没有完成这个问题的所有工作,但我不能添加权限,因为它错误地说它需要一个系统应用程序。你当前的方法是使用反射来获取接口。虽然它确实有效。。我认为这有点太特殊了,不能暴露在应用程序中。可能有一个原因,为什么它不在SDK中,为什么您必须使用反射来获取它。但我们努力找到解决问题和需求的方法:)!我知道这不是最好的解决方案,我个人觉得这是一个有点'黑客'的技术,使其工作,但不幸的是,似乎是唯一的办法。我不完全理解谷歌为什么会这么做。从所有的博客和帖子来看,这似乎是一个相当流行的功能。老实说,我对这个解决方案并不完全满意,担心如果谷歌决定改变/阻止这个方法,它可能最终会崩溃,因为没有其他解决方案。简单地说,这是一种危险的功能,让应用程序可以免费使用,能够取消来电和接听来电,而不需要SDK的调解。这似乎有点古怪,也有点危险。这将是在您的广播接收器类中,您可以监视广播意图