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

从Gmail直接打开PDF触发Permission Denial权限拒绝问题求助

从Gmail直接打开PDF触发Permission Denial权限拒绝问题求助

大家好,我现在遇到一个头疼的权限问题想请教各位:
我的PDF阅读器APP在打开已经下载到手机本地的PDF文件时完全正常,但直接从Gmail应用里打开PDF文件就会触发Permission Denial权限拒绝错误。

以下是我当前的相关配置和代码:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.docreader">
    <!-- Wymagane uprawnienia do odczytu plików PDF -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />

    <application android:name=".MainApplication" android:label="@string/app_name" android:requestLegacyExternalStorage="true" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:exported="true" android:theme="@style/AppTheme" android:supportsRtl="true">
        <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true">
            <!-- Intent filter to handle PDF files -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.SEND" />
                <action android:name="android.intent.action.PICK" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <!-- Obsługuj pliki PDF: content:// i file:// -->
                <data android:mimeType="application/pdf" />
                <!-- <data android:scheme="content" android:mimeType="application/pdf" />
                <data android:scheme="file" android:mimeType="application/pdf" /> -->
                <data android:scheme="content" />
                <data android:scheme="file" />
            </intent-filter>
        </activity>
        <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
        </provider>
    </application>
</manifest>

app.json

{
    "name": "DocReader",
    "displayName": "DocReader",
    "permissions": [
        "android.permission.READ_EXTERNAL_STORAGE",
        "android.permission.WRITE_EXTERNAL_STORAGE",
        "android.permission.ACCESS_MEDIA_LOCATION"
    ]
}

MainActivity.kt(代码未粘贴完整,仅展示核心逻辑)

package com.docreader

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.core.content.FileProvider
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.ReactApplication
import com.facebook.react.modules.core.DeviceEventManagerModule
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
import com.facebook.react.defaults.DefaultReactActivityDelegate
import java.io.File
import java.io.FileOutputStream

class MainActivity : ReactActivity() {
    override fun getMainComponentName(): String = "DocReader"

    override fun createReactActivityDelegate(): ReactActivityDelegate =
        DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        intent?.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        intent?.let { handleIncomingFile(it) }
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        handleIncomingFile(intent)
    }

    private fun handleIncomingFile(intent: Intent) {
        val uri: Uri? = when (intent.action) {
            Intent.ACTION_VIEW -> intent.data
            Intent.ACTION_SEND -> intent.getParcelableExtra(Intent.EXTRA_STREAM)
            else -> null
        }

        if (uri != null) {
            try {
                val inputStream = contentResolver.openInputStream(uri)
                val file = File(cacheDir, "temp_imported.pdf")
                val outputStream = FileOutputStream(file)
                // 此处代码未粘贴完整
            } catch (e: Exception) {
                Log.e("MainActivity", "Error handling incoming file", e)
            }
        }
    }
}

想请教各位,这种从Gmail直接打开PDF触发的权限拒绝问题,可能是哪里配置出了问题?应该怎么修复?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:13:10