You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已获取Root权限的设备如何为应用授予READ_VOICEMAIL权限?

解决Android 13下获取READ_VOICEMAIL权限的问题

一、修复pm grant命令失效的问题

部分系统级权限(如语音信箱相关权限)需要指定用户身份或更高权限上下文才能授予,直接执行pm grant可能失败,可尝试以下两种方式:

  1. 指定主用户执行命令
    通过Root切换后,明确指定用户ID为0(主用户)执行授权:
su
pm grant --user 0 com.my.app com.android.voicemail.permission.READ_VOICEMAIL
  1. 直接修改权限数据库
    如果命令仍报错,可直接操作系统权限数据库(需先挂载/system为可读写):
su
mount -o rw,remount /system
sqlite3 /data/system/users/0/runtime-permissions.db
INSERT OR REPLACE INTO permissions (packageName, name, granted, flags) VALUES ('com.my.app', 'com.android.voicemail.permission.READ_VOICEMAIL', 1, 0);
.exit
mount -o ro,remount /system

执行后重启应用,权限即可生效。

二、解决移至/system/priv-app导致无限重启的问题

Android 13对系统应用的校验逻辑更严格,直接移动APK到该目录引发重启通常是以下原因:

  1. 应用未使用系统签名
    LineageOS 20要求priv-app下的应用必须与ROM签名兼容,若没有ROM的签名密钥,此方法不可行。

  2. 缺少系统应用必要声明
    系统应用需在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"或android:uid.phone",同时将目标权限的protectionLevel设为signature或signatureOrSystem,否则系统会拒绝加载应用。

  3. 使用兼容的Magisk模块替代
    尝试Universal Systemless Interface (USI) 或Systemizer (Terminal Emulator) 这类支持Android 12/13的模块:
    安装模块后,在终端执行su -c systemizer,按提示选择应用完成系统化,这种无系统分区修改的方式不会触发重启。

三、替代方案:Root权限下直接访问Content Provider

若上述方法均无效,可利用Root权限直接读取语音信箱的Content Provider:

// 示例代码(需Root权限)
ContentResolver resolver = getContentResolver();
Uri voicemailUri = Uri.parse("content://com.android.voicemail/voicemail");
String[] projection = {"_id", "number", "duration", "date"};

// 通过Root执行内容查询
Process process = Runtime.getRuntime().exec("su");
OutputStream os = process.getOutputStream();
os.write(("content query --uri " + voicemailUri + " --projection " + String.join(",", projection)).getBytes());
os.flush();
os.close();
// 读取process.getInputStream()获取查询结果

内容的提问来源于stack exchange,提问作者user496854

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:00:46