Android 拒绝来电

Android 拒绝来电,android,Android,我正在开发一款android系统,它允许用户将数字添加到黑名单中。当来电号码与黑名单中的号码匹配时,应拒绝接听来电,即使手机确实短暂响铃,然后断开通话 我发现的所有东西,包括SO,都说如果不在我创建的com.android.internal.telephony中创建AIDL,就无法完成,但我无法添加“修改手机状态”权限,因为它说它需要是一个系统应用程序 我的目标是ICS向上,我见过其他应用程序阻止ICS和向上的呼叫,那么这是如何做到的。我还尝试将“修改手机状态”权限添加到清单文件中,但它显示一个

我正在开发一款android系统,它允许用户将数字添加到黑名单中。当来电号码与黑名单中的号码匹配时,应拒绝接听来电,即使手机确实短暂响铃,然后断开通话

我发现的所有东西,包括SO,都说如果不在我创建的com.android.internal.telephony中创建AIDL,就无法完成,但我无法添加“修改手机状态”权限,因为它说它需要是一个系统应用程序

我的目标是ICS向上,我见过其他应用程序阻止ICS和向上的呼叫,那么这是如何做到的。我还尝试将“修改手机状态”权限添加到清单文件中,但它显示一个错误,表示该权限仅适用于系统应用程序,因此如何解决此问题。我不希望应用程序必须是根


感谢您提供的帮助

我幸运地找到了答案

而不是添加权限
MODIFY\u PHONE\u STATE
add permission
CALL\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的调解。这似乎有点古怪,也有点危险。这将是在您的广播接收器类中,您可以监视广播意图