我只是想在一个hello中简单地提示WRITE_EXTERNAL_STORAGE,targetSdk 28的安卓应用程序运行在Android12Pixel 5上。
整个项目都在这里:https://github.com/paulpv/AndroidPermissionsTest
主要代码内容是: build.gradle
android {
compileSdk 32
defaultConfig {
applicationId "com.example.permissionstest"
minSdk 26
targetSdk 28
versionCode 1
versionName "1.0"
}
...
}
AndroidManifest.xml
<manifest ...>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"
/>
<application
...
android:requestLegacyExternalStorage="true"
>
...
</application>
</manifest>
MainActivity.kt
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:
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(...)
没有启动吗?
发布于 2022-06-15 12:08:54
从安卓12,现在你不需要WRITE_EXTERNAL_STORAGE的许可。相反,您需要为android 11之上的设备实现作用域存储。
https://stackoverflow.com/questions/72626488
复制相似问题