【问题标题】:Reject an incoming call拒绝来电
【发布时间】:2013-02-07 06:59:33
【问题描述】:

我正在开发一个允许用户将数字添加到黑名单的 android。当来电号码与黑名单中的号码匹配时,应拒绝呼叫,即使电话短暂响铃然后断开呼叫也是如此。

我在 SO 上找到的所有内容都表示,如果不在我创建的 com.android.internal.telephony 中创建 AIDL 就无法完成,但我无法添加修改手机状态权限,因为它说需要是系统应用程序。

我的目标是 ICS 向上,我看到其他应用程序阻止 ICS 和向上的调用,所以这是如何完成的。我还尝试将修改手机状态权限添加到清单文件中,它显示一个错误,指出它仅适用于系统应用程序,所以我该如何解决这个问题。我不希望该应用程序必须植根。

感谢您提供的任何帮助

【问题讨论】:

  • 也许这个帖子可以帮到你stackoverflow.com/questions/7121508/…
  • @MatthewFisher 不幸的是,没有,完成了该问题中的所有操作,但我无法添加权限,因为它错误地说它需要是一个系统应用程序
  • 您当前的方法是使用反射来获取接口。虽然它确实有效.. 我认为这有点太特殊了,无法暴露给应用程序。可能有它不在 SDK 中的原因,以及为什么您必须使用反射来抓取它。但我们努力为我们的问题和要求找到解决方案:)!
  • 我知道这不是最好的解决方案,而且我个人觉得让它工作的技术有点“hacky”,但不幸的是似乎是唯一的方法。不完全理解为什么谷歌会这样做。基于所有的博客和帖子,它似乎是非常流行的功能。老实说,对这个解决方案并不完全满意,担心如果谷歌决定更改/阻止这个方法,它最终可能会崩溃
  • 没有其他解决方案。简而言之,让应用免费使用它来取消来电和接听电话而无需 SDK 调解,这是一种危险的功能,这似乎有点奇怪,也有点危险。

标签: android


【解决方案1】:

我靠一点运气找到了答案。

而不是添加权限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();
        }

希望这对其他人有所帮助,它不太容易找到。我不明白为什么谷歌删除了这样做的能力而不像这样搞砸。

【讨论】:

  • 它将在您的广播接收器类中,您可以在其中监控广播意图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多