【问题标题】:Can't auto answer phone call within my Android System App via ITelephony无法通过 ITelephony 在我的 Android 系统应用程序中自动接听电话
【发布时间】:2015-10-01 00:57:08
【问题描述】:

我想通过自动接听电话来使用 Android Lollipop 上的 android.permission.MODIFY_PHONE_STATE,就像 Play 商店中提供的一些免提“驾驶员辅助”应用程序一样。

我从AutoAnswer project 中找到了一些代码,但是当我运行它时,我得到一个 InvocationTargetException 说明“用户 #### 和应用程序都没有 MODIFY_PHONE_STATE 权限。”

但是,在我的清单中,我有:<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 并且我已将我的 apk 安装到 /system/app/AutoAnswer.apk 并将其权限设置为 644。

要求是我不需要为手机扎根即可工作,但我确实能够将我的应用程序添加到自定义 ROM(因此它是一个系统应用程序)。

调用代码如下:

        TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        Object telephonyService = m.invoke(tm);

        Method m1 = telephonyService.getClass().getMethod("silenceRinger");
        Method m2 = telephonyService.getClass().getMethod("answerRingingCall");

        //m1.invoke(telephonyService); // not supported for OnePlus2
        m2.invoke(telephonyService); // <- This is the line that throws the error

为什么不允许我从我的系统应用程序中使用 MODIFY_PHONE_STATE..?有解决办法吗?

【问题讨论】:

  • 它是否由与您的 ROM 签名相同的签名签名?两者都应该由同一人签名。将 apk 推送到 /system/ 不足以使应用程序成为系统应用程序。
  • 不,它没有使用相同的签名进行签名。 MODIFY_PHONE_STATE 被标记为“signatureOrSystem”所以我读这个要么由相同的签名签名,要么是从系统应用程序运行的..? android.googlesource.com/platform/frameworks/base/+/…

标签: android root android-hardware


【解决方案1】:

如需解决您的问题,不妨查看How can incoming calls be answered programmatically in Android 5.0 (Lollipop)?

如果从用户那里获得明确的通知访问权限是可以的,那么您可以在那里查看我的答案,该答案在 Android 5.0 和 5.1 下对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多