从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
相关产品推荐
相关产品推荐

