首页 > 解决方案 > Redmi 6 - 无法挂断电话

问题描述

我想实现挂断电话的功能。

但在 Redmi 6(Android 8.1)中,这是不可能的。

我用了以下两种方法:</p>

1.

TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
if (telecomManager != null) {
     telecomManager.endCall();
}

得到以下错误:

java.lang.SecurityException: Neither user 10179 nor current process has android.permission.MODIFY_PHONE_STATE

2.

TelephonyManager mTelMgr = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
Class<TelephonyManager> c = TelephonyManager.class;
try {
    Method getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null);
    getITelephonyMethod.setAccessible(true);
    ITelephony iTelephony;
    iTelephony = (ITelephony) getITelephonyMethod.invoke(mTelMgr, (Object[]) null);
    iTelephony.endCall();
} catch (Exception e) {
    e.printStackTrace();
}

得到以下错误:

java.lang.SecurityException: MODIFY_PHONE_STATE permission required.

但在其他手机测试中,是可以执行的。

我不知道问题出在哪里。

标签: android

解决方案


文档

API 级别 1 中添加的 MODIFY_PHONE_STATE

公共静态最终字符串 MODIFY_PHONE_STATE

允许修改电话状态 - 开机、mmi 等。不包括拨打电话。

不供第三方应用程序使用。

所以你的应用不能使用这个权限,除非它的系统应用或者你的设备已经root


推荐阅读