首页 > 解决方案 > READ_CALL_LOG 权限的 Android 问题

问题描述

安卓 8.1,Java

我是新手,正在制作一个非常基本的重拨应用程序,我只需要拨打最后一个号码。为了获得该号码,我使用了需要 READ_CALL_LOG 权限的 getLastOutgoingCall。我这样要求:

if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_CALL_LOG}, 100);
        }

如果我请求其他权限(如 READ_CONTACT),则此方法有效,但由于某种原因,读取调用日志仅返回权限被拒绝,甚至没有提示权限。我怎样才能正确获得此权限,或者是否有更好的方法来拨打最后一个号码?

标签: javaandroidandroid-studio

解决方案


来自 READ_CALL_LOG 的文档

这是一个硬限制权限,在记录上的安装程序将该权限列入白名单之前,应用程序不能持有该权限。有关更多详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。

听起来您的设备已设置为硬阻止该权限。

此外,您的应用不太可能在 Google Play 上获得许可。有关限制,请参阅https://support.google.com/googleplay/android-developer/answer/10208820?hl=en#zippy=%2Cpermitted-uses-of-the-sms-and-call-log-permissions%2Cexceptions在那个许可上。我认为您对此有一个论据,但这将取决于 Google 人员查看例外情况的心血来潮。


推荐阅读