授予权限后,Android中的摄像头权限不起作用

I'm trying to develop a simple camera preview app for Android Oreo and above. In my Camera fragment, I have the following methods:

fun hasPermission() = ContextCompat.checkSelfPermission(activity!!, permission.CAMERA) != PackageManager.PERMISSION_GRANTED


override fun onResume() {
    super.onResume()

    if (!hasPermission()) {
        requestPermissions(arrayOf(permission.CAMERA), CAMERA_PERMISSIONS_REQUEST_CODE)
        return
    }

    // access camera
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    if (requestCode != CAMERA_PERMISSIONS_REQUEST_CODE) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        return
    }

    if (grantResults.filter { it != PackageManager.PERMISSION_GRANTED }.any()) {
        activity?.finish()
        Log.e(null, "Permission denied")
    }

    // access camera
}

但是,当我调试该应用程序时,每次尝试使用该堆栈跟踪来访问相机时,它都会崩溃:

I/Perf: Connecting to perf service.
I/robinson.loupe: [GL_OOM] ClampGrowthLimit 268435456
V/Font: Change font:2
V/Font: Default family:android.graphics.Typeface@3de20b74
E/Perf: Fail to get file list com.richardrobinson.loupe3
    getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
E/Perf: Fail to get file list com.richardrobinson.loupe3
    getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
W/RenderThread: type=1400 audit(0.0:39044): avc: denied { search } for name="gpu" dev="dm-3" ino=8388673 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:vendor_gles_data_file:s0 tclass=dir permissive=0
W/robinson.loupe: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/robinson.loupe: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
I/CameraManagerGlobal: Connecting to camera service
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/robinson.loupe3: type=1400 audit(0.0:39046): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/CameraManagerGlobal: [soar.cts] ignore the status update of camera: 2
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/robinson.loupe3: type=1400 audit(0.0:39048): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
W/CameraManagerGlobal: [soar.cts] ignore the status update of camera: 3
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/CameraManagerGlobal: [soar.cts] ignore the status update of camera: 4
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/CameraManagerGlobal: [soar.cts] ignore the status update of camera: 5
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
I/OPFD_Manager: Follow AOSP false
I/OPFD_Manager: Follow AOSP false
V/ViewRootImpl: The specified message queue synchronization  barrier token has not been posted or has already been removed
D/DecorView: onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@8e1830e[MainActivity]
I/AdrenoGLES: QUALCOMM build                   : bc92c36, I9e73322269
    Build Date                       : 08/28/19
    OpenGL ES Shader Compiler Version: EV031.27.02.00
    Local Branch                     : 
    Remote Branch                    : refs/tags/AU_LINUX_ANDROID_LA.UM.8.1.R1.09.00.00.529.074
    Remote Branch                    : NONE
    Reconstruct Branch               : NOTHING
    Build Config                     : S P 8.0.8 AArch64
I/AdrenoGLES: PFP: 0x016ee187, ME: 0x00000000
D/OpScreenModeManager: setRefreshRate token android.os.BinderProxy@8b5b680 rate 1 mCurrentRate 0
D/OpScreenModeManager: updateScenario fullScreen 1
W/Gralloc3: mapper 3.x is not supported
D/: Successfully load libgui-plugin.so, this=0x7e65d36050
D/OpScreenModeManager: setRefreshRate token android.os.BinderProxy@8b5b680 rate 0 mCurrentRate 1
D/OpScreenModeManager: updateScenario fullScreen 0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/Activity: Can request only one set of permissions at a time
D/OpScreenModeManager: setRefreshRate token android.os.BinderProxy@8b5b680 rate 1 mCurrentRate 0
D/OpScreenModeManager: updateScenario fullScreen 1
D/OnePlusJankManager:  Chor uploadMDM JANK_TYPE_ONCE mViewTitle = com.richardrobinson.loupe3/com.richardrobinson.loupe3.MainActivity--- jank level = 1
W/robinson.loupe3: type=1400 audit(0.0:39063): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
D/DecorView: onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@8e1830e[]
W/robinson.loupe3: type=1400 audit(0.0:39064): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "persist.vendor.camera.privapp.list"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/Binder:8696_1: type=1400 audit(0.0:39066): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "persist.vendor.camera.privapp.list"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/System: A resource failed to call release. 
    A resource failed to call release. 
W/Binder:8696_1: type=1400 audit(0.0:39106): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"
W/Binder:8696_1: type=1400 audit(0.0:39107): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16730 scontext=u:r:untrusted_app:s0:c142,c257,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "vendor.camera.aux.packagelist"

另外,这是我的清单:

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

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.IMAGE_CAPTURE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.VIDEO_CAPTURE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.action.VIDEO_CAMERA" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.glass.TouchEnabledApplication"
            android:value="true" />
    </application>

</manifest>

我遇到的所有其他StackOverflow帖子均已通过添加权限检查或清单中的权限进行了修复,而我都完成了这两项。

我正在使用Windows 10和Android Studio的最新版本。谢谢!

评论