【问题标题】:requestPermissions doesnt work for READ_CALL_LOG and WRITE_CALL_LOG on android 8.1 API 27requestPermissions 不适用于 READ_CALL_LOG 和 WRITE_CALL_LOG 在 android 8.1 API 27
【发布时间】:2018-05-17 22:44:52
【问题描述】:

我一直在尝试访问通话记录,但请求权限似乎不起作用

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.stanrares.firstapp">

    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

请求权限的函数:

    public void EnableRuntimePermissionToAccessCallLogs()
        {
            Log.i(TAG,"EnableRuntimePermissionToAccessCallLogs called");

            if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED)
            {
                Log.i(TAG,"giving read call log permission");
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{Manifest.permission.READ_CALL_LOG},
                        1);
                Log.i(TAG,"giving read call log permission 2");
            }

            if(ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_CALL_LOG) != PackageManager.PERMISSION_GRANTED)
            {
                Log.i(TAG,"giving write call log permission");
                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{Manifest.permission.WRITE_CALL_LOG},
                        1);
                Log.i(TAG,"giving write call log permission 2");

            }
            Log.i(TAG,"EnableRuntimePermissionToAccessCallLogs called 2");

        }

我已经尝试使用工具删除清单文件中的命名空间

【问题讨论】:

  • “似乎不起作用”——这究竟是什么意思?
  • 没有弹出请求权限,应用崩溃
  • 引起:java.lang.SecurityException:权限被拒绝:从 ProcessRecord{b85e01b 17217:com.example.stanrares.firstapp/u0a107} 打开提供程序 com.android.providers.contacts.CallLogProvider (pid= 17217, uid=10107) 需要来自 logcat 的 android.permission.READ_CALL_LOG 或 android.permission.WRITE_CALL_LOG
  • 什么时候给EnableRuntimePermissionToAccessCallLogs()打电话?在调用需要这些权限的方法之前,您是否等待调用 onRequestPermissionsResult()(授予权限)?
  • 也许通过较早的测试,您有效地为该组做了“不再询问”。尝试完全卸载并重新安装您的应用程序。此外,我强烈建议您为所有需要的权限调用一次requestPermissions(),而不是每个权限一次。

标签: android permissions manifest


【解决方案1】:

我认为您正在使用 getActivity().getContentResolver().query 之类的方法来获取代码中某处的通话记录。

然后你需要提供一个 ContentProvider 来获取 URI 并实现查询。 这随着 API26 改变: https://developer.android.com/about/versions/oreo/android-8.0-changes#rmp

发布您的代码,然后我们可以找到解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多