android - 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.
但在其他手机测试中,是可以执行的。
我不知道问题出在哪里。
解决方案
从文档
API 级别 1 中添加的 MODIFY_PHONE_STATE
公共静态最终字符串 MODIFY_PHONE_STATE
允许修改电话状态 - 开机、mmi 等。不包括拨打电话。
不供第三方应用程序使用。
所以你的应用不能使用这个权限,除非它的系统应用或者你的设备已经root
推荐阅读
- python - Gitlab-CI 使用令牌而不是 ssh 密钥从 setup.py 克隆私有仓库?
- ios - Swift UIDocument 保存不可靠
- java - 在 Wildfly/JBoss 应用服务器上以编程方式创建 Web 服务
- vba - VLookup 的问题和可能的解决方法
- python - 如果我们从用户那里获得输入,如果我们要求输入密码,如何获得输入为 *(星号)?
- python - 如何在pyqt5中获取不带引号的文件路径
- google-apps-script - 我需要一个脚本,它会在单元格值更改时自动触发 sendEmail 函数
- kubernetes - 获取停留在终止状态超过 10 分钟的 Pod 列表,并在 Ansible 中将其删除
- android - Android:如何从库回调到主应用程序项目?
- linux - Bash one-liner 保存到文件然后使用内容