尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框
Posted
技术标签:
【中文标题】尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框【英文标题】:Android permissions dialog not being show when trying to get READ_PHONE_STATE permissions 【发布时间】:2020-03-05 05:04:51 【问题描述】:我正在尝试使用 READ_PHONE_STATE 权限,因此(它们被视为危险权限)我必须检查是否已授予,如果未授予则请求权限。我的检查 (ContextCompat.checkSelfPermission) 返回 false,所以我运行 ActivityCompat.requestPermissions。应该显示的对话框没有出现。
我的目标是 API 28,所以我尝试添加 READ_CALL_LOG 权限,这也被认为是危险的,但也没有被授予。
var selfPermission = ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_CALL_LOG)
if (selfPermission != PackageManager.PERMISSION_GRANTED)
val perms = arrayOf(android.Manifest.permission.READ_CALL_LOG)
ActivityCompat.requestPermissions(this, perms,
Constants.PERMISSION_READ_CALL_LOG_REQUEST)
selfPermission = ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_CALL_LOG)
if (selfPermission != PackageManager.PERMISSION_GRANTED)
return
selfPermission = ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_PHONE_STATE)
if (selfPermission != PackageManager.PERMISSION_GRANTED)
val perms = arrayOf(android.Manifest.permission.READ_PHONE_STATE)
ActivityCompat.requestPermissions(this, perms,
Constants.PERMISSION_READ_PHONE_REQUEST)
selfPermission = ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_PHONE_STATE)
if (selfPermission != PackageManager.PERMISSION_GRANTED)
return
【问题讨论】:
【参考方案1】:我也遇到了这个问题,就我而言,这是由于我正在运行 requestPermission
调用的线程,它不是 UI 线程(Java 执行程序)。
所以要解决这个问题,你应该确保你在主线程上(Java 版本):
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable()
@Override
public void run()
ActivityCompat.requestPermissions(context, perms,
Constants.PERMISSION_READ_CALL_LOG_REQUEST);
);
【讨论】:
以上是关于尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框的主要内容,如果未能解决你的问题,请参考以下文章
应用程序在请求 READ_PHONE_STATE 权限时崩溃并出现 IllegalStateException
Unity Android READ_PHONE_STATE 权限
警告您的 Apk 正在使用需要隐私政策的权限:(android.permission.READ_PHONE_STATE)