gpt4 book ai didi

android - 安全异常 : not allowed to perform OP_READ_PHONE_STATE

转载 作者:行者123 更新时间:2023-12-04 04:27:30 24 4
gpt4 key购买 nike

用户使用此错误跟踪报告我的应用程序崩溃

java.lang.SecurityException: com.android.phone from uid 10134 not allowed to perform OP_READ_PHONE_STATE
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getVoiceMailNumberForSubscriber(IPhoneSubInfo.java:858)
at android.telephony.TelephonyManager.getVoiceMailNumber(TelephonyManager.java:2383)
at android.telephony.TelephonyManager.getVoiceMailNumber(TelephonyManager.java:2366)

到目前为止,只有一位用户报告了此问题。数千名其他用户正在运行此版本的应用程序,没有明显问题。

调用 TelephonyManager.getVoiceMailNumber() 时抛出异常.根据需要记录此操作 READ_PHONE_STATE绝对肯定地获得了许可。

我找到了 OP_READ_PHONE_STATE android.apps.AppOpsManager 的权限上课,但无法弄清楚它到底对什么不满意。

任何人都可以解释正在发生的事情以及需要做些什么来解决问题。

谢谢,
-肯

最佳答案

在 AOSP 中寻找该方法最终会导致 cheakReadPhoneState() method .
在 Android 6 中,该方法为 here .
在这两种情况下,它看起来都非常相似。这是Android 6代码:

private boolean checkReadPhoneState(String callingPackage, String message) {
try {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, message);

// SKIP checking run-time OP_READ_PHONE_STATE since self or using PRIVILEGED
return true;
} catch (SecurityException e) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
message);
}

return mAppOps.noteOp(AppOpsManager.OP_READ_PHONE_STATE, Binder.getCallingUid(),
callingPackage) == AppOpsManager.MODE_ALLOWED;
}
首先它检查是否 READ_PRIVILEGED_PHONE_STATE被授予。如果是,则其余代码被短路并返回 true。否则,它会确保 READ_PHONE_STATE被授予,否则抛出 SecurityException。
最后,如果 READ_PHONE_STATE被授予,它确保 OP_READ_PHONE_STATE也被授予。我不完全确定它为什么会这样做,但这就是问题所在。无论发生在哪个设备上,运行时权限的工作方式都发生了一些变化。当 READ_PHONE_STATE授予权限, OP_READ_PHONE_STATE op 也应该被授予,但是系统出于某种原因正在撤销该 op。
(也有可能用户正在使用应用程序来管理应用程序操作并手动撤销它。)
为了修复它,我真的不认为你可以。您能做的最好的事情是捕获错误并要求用户运行 ADB 命令来手动授予操作: adb shell appops set com.your.packagename READ_PHONE_STATE allow .

关于android - 安全异常 : not allowed to perform OP_READ_PHONE_STATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com