OnActivityResult 始终 returns 结果在 Android 11 上取消(代码:0)

OnActivityResult always returns RESULT CANCELED (Code: 0) on Android 11

可悲的是,Android 11 个存储限制太难和令人困惑。

我正在尝试使用以下代码选择文档

    fun onFile(activity: AppCompatActivity?, fragmentContext: Fragment?, isMultiple: Boolean?, pFileMimeTypes: Array<String>?): Intent {
            val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                action = Intent.ACTION_OPEN_DOCUMENT
                addCategory(Intent.CATEGORY_OPENABLE)
                putExtra(Intent.EXTRA_ALLOW_MULTIPLE, isMultiple ?: false)
                addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            }
    
            val fileMimeTypes = pFileMimeTypes ?: FileUtil.mimeTypes
            intent.type = if (fileMimeTypes.size == 1) fileMimeTypes[0] else "*/*"
            if (!fileMimeTypes.isNullOrEmpty()) {
                intent.putExtra(Intent.EXTRA_MIME_TYPES, fileMimeTypes)
            }
    
    
            val list = activity?.packageManager?.queryIntentActivities(intent, PackageManager.MATCH_ALL)
            if (list?.size!! > 0) {
                if (fragmentContext == null) {
                    activity.startActivityForResult(
                            Intent.createChooser(
                                    intent,
                                    activity.getString(R.string.m_selectFile_txt)
                            ), FILE_CODE
                    )
                } else {
                    fragmentContext.startActivityForResult(
                            Intent.createChooser(
                                    intent,
                                    activity.getString(R.string.m_selectFile_txt)
                            ), FILE_CODE
                    )
                }
            }
// returning intent is not being used anywhere else
            return intent
        }

虽然我拥有所有文件访问权限Environment.isExternalStorageManager(),但仍然在从外部存储(下载或任何文件夹)中选择文档(PDF)后,OnActvityResult 被调用 result code 0 .我需要所选文档的 Uri 才能继续。

对于任何其他参考,下面是我的清单文件

<?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="*****Hidden*******">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <uses-permission android:name="android.permission.READ_STORAGE_PERMISSION"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity
            android:exported="true"
            android:name=".Main2Activity"
            android:launchMode="singleTask"
            android:label="@string/title_activity_main2"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">

        </activity>

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



    <queries>
        <intent>
            <action android:name="android.intent.action.OPEN_DOCUMENT" />
            <!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". -->
            <data android:mimeType="*/*" />
        </intent>
        <intent>
            <action android:name="android.intent.action.PICK" />
            <!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". -->
            <data android:mimeType="*/*" />
        </intent>
    </queries>


</manifest>

我一定漏掉了一些要点。 Android 11

以下一切正常

提前致谢。

startActivityForResult 已弃用

参考这个link

使用Activity 结果API Official Docs