Код: Выделить всё
private fun requestPermission() {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
val uri = Uri.parse(Files.URI) // Files.URI is a constant whose value is "content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fmedia/document/primary%3AAndroid%2Fmedia%2Fcom.whatsapp%2FWhatsApp%2FMedia%2F.Statuses".
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri)
startForResult.launch(intent) // The codes related to startForResult will follow.
}
Код: Выделить всё
private val startForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode != Activity.RESULT_OK) return@registerForActivityResult
val uri = result.data?.data ?: return@registerForActivityResult
val documentFile = DocumentFile.fromTreeUri(requireContext(), uri) // This code is in a fragment, so I used requireContext().
if (documentFile?.uri?.path?.contains(Files.STATUSES_DIRECTORY) == true) { // Files.STATUSES_DIRECTORY is a constant whose value is "Android/media/com.whatsapp/WhatsApp/Media/.Statuses".
App.editor.putString(SharedPreferences.ACCESS_FOLDER, uri.toString()).apply()
binding.permissionDenied.visibility = View.GONE
binding.recyclerView.visibility = View.VISIBLE
CoroutineScope(Dispatchers.Default).launch { getStatuses() }
} else {
binding.recyclerView.visibility = View.GONE
binding.permissionDenied.visibility = View.VISIBLE
Toast.makeText(
requireContext(),
getString(R.string.selected_folder_is_false),
Toast.LENGTH_LONG
).show()
}
}
Код: Выделить всё
override fun onResume() {
super.onResume()
val uriString = App.preferences.getString(SharedPreferences.ACCESS_FOLDER, null)
if (uriString != null) {
val uri = Uri.parse(uriString)
val documentFile = DocumentFile.fromTreeUri(requireContext(), uri)
if (documentFile?.canRead() == true) CoroutineScope(Dispatchers.Default).launch { getStatuses() } else getStatuses()
} else getStatuses()
}
< /code>
Приложение работает правильно, но после выхода и повторного въезда оно снова запрашивает доступ. Используя log Как может Я предотвращаю отмену доступа и не запрашиваю его снова?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ng-the-app
Мобильная версия