You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android扫描应用QR功能及图库访问权限问题求助

安卓文档扫描应用权限问题排查方案

问题详情

  • 应用的文档扫描、保存、分享功能正常,但启动QR阅读器、QR生成器或从图库选择图片时,弹出错误提示:

"you have forcefully denied some of the required permissions for this action. please open setting, go to permissions and allow them"

  • 已手动授予Camera及所有请求的权限,问题仍未解决,以下是应用的Manifest文件内容:
<?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.Pdf.scanner">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:name="com.Pdf.scanner.MyApp"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.CamScanner"
        android:usesCleartextTraffic="true">

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities,android:exported">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"
                tools:replace="android:resource" />
        </provider>

        <activity
            android:name="com.scanlibrary.ScanActivity"
            android:configChanges="orientation|screenSize"
            android:exported="false"
            android:label="@string/app_name" >
        </activity>

        <activity android:name="com.Pdf.scanner.activity.BaseActivity"
            android:exported="true"

            ></activity>

        <activity android:name="com.Pdf.scanner.activity.LangSupportBaseActivity"
            android:exported="false"/>
        <activity android:name="com.Pdf.scanner.activity.LanguageSelectionActivity"
            android:exported="false"/>

        <activity
            android:name="com.Pdf.scanner.activity.SplashActivity"
            android:resizeableActivity="false"
            android:exported="true"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.Pdf.scanner.activity.MultiEditActivity"
            android:exported="true"
            android:screenOrientation="portrait"></activity>
        <activity
            android:name="com.Pdf.scanner.activity.MainActivity"
            android:screenOrientation="portrait"
            android:exported="true"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name="com.Pdf.scanner.activity.ScannerActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.yalantis.ucrop.UCropActivity"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@style/uCropStyle" />
        <activity
            android:name="com.Pdf.scanner.activity.IDCardPreviewActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.CropDocumentActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.CurrentFilterActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.SavedDocumentActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.DocumentEditorActivity"
            android:exported="false"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustNothing" />
        <activity
            android:name="com.Pdf.scanner.activity.SavedEditDocumentActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.SavedDocumentPreviewActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.NoteActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.ImageToTextActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.GroupDocumentActivity"
            android:exported="true"

            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.PDFViewerActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.QRGenerateActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.QRReaderActivity"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity
            android:name="com.Pdf.scanner.activity.PrivacyPolicyActivity"
            android:exported="true"
            android:screenOrientation="portrait" />

        <meta-data
            android:exported="true"
            android:name="com.google.android.gms.vision.DEPENDENCIES"
            android:value="ocr" />
        <meta-data
            android:exported="true"
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/admob_app_id" />

        <activity
            android:name="com.nguyenhoanglam.imagepicker.ui.imagepicker.ImagePickerActivity"
            android:configChanges="orientation|screenSize"
            android:exported="false"
            android:theme="@style/imagepicker_ImagePickerTheme" />
        <activity
            android:name="com.nguyenhoanglam.imagepicker.ui.camera.CameraActivity"
            android:screenOrientation="unspecified"
            android:theme="@style/imagepicker_CameraTheme"
            android:exported="false"
            tools:replace="android:screenOrientation" />

        <receiver
            android:name="com.onesignal.FCMBroadcastReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND" >
</manifest>

排查与解决步骤

1. 补全适配Android 13+的存储权限

Android 13及以上版本,访问图库图片需要READ_MEDIA_IMAGES权限,而非旧的READ_EXTERNAL_STORAGE,在Manifest中添加:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33"/>

2. 检查动态权限请求逻辑

  • QR阅读器:确认QRReaderActivity启动前,是否通过ActivityCompat.requestPermissions()动态请求CAMERA权限,并且处理了用户拒绝(包括“不再询问”的场景),避免仅依赖Manifest声明。
  • 图库选择:针对Android 13+请求READ_MEDIA_IMAGES,Android 10及以下请求READ_EXTERNAL_STORAGE,确保权限请求逻辑适配对应系统版本。

3. 修正权限状态判断代码

检查触发错误提示的权限校验逻辑,确保使用ContextCompat.checkSelfPermission()准确判断权限状态,避免自定义逻辑误判(比如把“已授权”状态错误识别为“拒绝”)。

4. 排查第三方库权限依赖

项目中使用的com.nguyenhoanglam.imagepicker图片选择库,可能需要额外权限,查看该库的官方文档,确认是否有遗漏的权限声明。

5. 清除应用权限缓存

让用户尝试清除应用数据/缓存,然后重新授予所有权限,排除系统权限状态缓存导致的异常。


内容的提问来源于stack exchange,提问作者earn Crypto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:49:54