首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android registerForActivityResult的启动从不提示权限

Android registerForActivityResult的启动从不提示权限
EN

Stack Overflow用户
提问于 2022-06-15 05:56:21
回答 1查看 178关注 0票数 2

我只是想在一个hello中简单地提示WRITE_EXTERNAL_STORAGE,targetSdk 28的安卓应用程序运行在Android12Pixel 5上。

整个项目都在这里:https://github.com/paulpv/AndroidPermissionsTest

主要代码内容是: build.gradle

代码语言:javascript
运行
复制
android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.permissionstest"
        minSdk 26
        targetSdk 28
        versionCode 1
        versionName "1.0"
    }
    ...
}

AndroidManifest.xml

代码语言:javascript
运行
复制
<manifest ...>

    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="28"
        />

    <application
        ...
        android:requestLegacyExternalStorage="true"
        >
        ...
    </application>
</manifest>

MainActivity.kt

代码语言:javascript
运行
复制
    private var runAfterRequestWriteExternalStoragePermissions: (() -> Unit)? = null
    private val writeExternalStoragePermissionsRequired =
        arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    private val requestWriteExternalStoragePermissions =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
            val runAfter = runAfterRequestWriteExternalStoragePermissions
            runAfterRequestWriteExternalStoragePermissions = null
            if (permissions.containsValue(false)) return@registerForActivityResult
            runAfter?.invoke()
        }

    private fun requestWriteExternalStoragePermissions(runAfter: () -> Unit) {
        Log.i(TAG, "+requestWriteExternalStoragePermissions(...)")
        writeExternalStoragePermissionsRequired.forEach {
            val permission = ContextCompat.checkSelfPermission(this, it)
            if (permission != PackageManager.PERMISSION_GRANTED) {
                runAfterRequestWriteExternalStoragePermissions = runAfter
                if (shouldShowRequestPermissionRationale(it)) {
                    AlertDialog.Builder(this).apply {
                        setTitle("Permission(s) Required")
                        setMessage("Please allow the required permission(s)")
                        setPositiveButton("OK") { _, _ ->
                            requestWriteExternalStoragePermissions.launch(
                                writeExternalStoragePermissionsRequired
                            )
                        }
                        setNegativeButton("Cancel", null)
                    }.show()
                } else {
                    Log.i(TAG, "requestWriteExternalStoragePermissions: requestWriteExternalStoragePermissions.launch($writeExternalStoragePermissionsRequired)")
requestWriteExternalStoragePermissions.launch(writeExternalStoragePermissionsRequired)
                }
                Log.i(TAG, "-requestWriteExternalStoragePermissions(...)")
                return
            }
        }
        runAfter()
        Log.i(TAG, "-requestWriteExternalStoragePermissions(...)")
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        Log.v(TAG, "+onCreate(...)")
        super.onCreate(savedInstanceState)
        //...
        requestWriteExternalStoragePermissions {
            Log.i(TAG, "Huzzah!")
        }
        Log.v(TAG, "-onCreate(...)")
    }

日志显示onCreate,然后是onStart,然后是onResume,然后是onPause,然后是onResume:

代码语言:javascript
运行
复制
2022-06-14 22:42:47.956 28831-28831/com.example.permissionstest V/MainActivity: +onCreate(...)
2022-06-14 22:42:48.416 28831-28831/com.example.permissionstest I/MainActivity: +requestWriteExternalStoragePermissions(...)
2022-06-14 22:42:48.419 28831-28831/com.example.permissionstest I/MainActivity: requestWriteExternalStoragePermissions: requestWriteExternalStoragePermissions.launch([Ljava.lang.String;@7baaa6)
2022-06-14 22:42:48.430 28831-28831/com.example.permissionstest I/MainActivity: -requestWriteExternalStoragePermissions(...)
2022-06-14 22:42:48.430 28831-28831/com.example.permissionstest V/MainActivity: -onCreate(...)
2022-06-14 22:42:48.446 28831-28831/com.example.permissionstest V/MainActivity: +onStart()
2022-06-14 22:42:48.463 28831-28831/com.example.permissionstest V/MainActivity: -onStart()
2022-06-14 22:42:48.469 28831-28831/com.example.permissionstest V/MainActivity: +onResume()
2022-06-14 22:42:48.470 28831-28831/com.example.permissionstest V/MainActivity: -onResume()
2022-06-14 22:42:48.514 28831-28831/com.example.permissionstest V/MainActivity: +onPause()
2022-06-14 22:42:48.521 28831-28831/com.example.permissionstest V/MainActivity: -onPause()
2022-06-14 22:42:48.987 28831-28831/com.example.permissionstest V/MainActivity: +onResume()
2022-06-14 22:42:48.987 28831-28831/com.example.permissionstest V/MainActivity: -onResume()

知道为什么我的requestWriteExternalStoragePermissions.launch(...)没有启动吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-15 12:08:54

从安卓12,现在你不需要WRITE_EXTERNAL_STORAGE的许可。相反,您需要为android 11之上的设备实现作用域存储。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72626488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档