#android
Вопрос:
Я новичок в разработке мобильных устройств. Я пытаюсь создать приложение с эффектом кроссфейда. Но мне нужно читать файлы без нажатия кнопки после открытия. Можете ли вы помочь в решении этого вопроса. Это мой код. И, пожалуйста, скажите мне «READ_EXTERNAL_STORAGE» после добавления этого, могу ли я прочитать все файлы в телефоне? Это важно знать, потому что я хочу найти mp3-файлы в своем телефоне и установить их вместо кнопок
package com.example.crossfade
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.example.crossfade.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.buttonOneTrack.setOnClickListener {
if (ContextCompat.checkSelfPermission(
this, android.Manifest.permission.READ_EXTERNAL_STORAGE) ==
PackageManager.PERMISSION_GRANTED) {
onStoragePermissionGranted()
} else {
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE),
RQ_PERMISSION_FOR_BUTTON_1
)
}
}
binding.buttonTwoTrack.setOnClickListener {
}
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
RQ_PERMISSION_FOR_BUTTON_1 -> {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onStoragePermissionGranted()
} else {
if (!shouldShowRequestPermissionRationale(android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
askUserForOpeningSettings()
} else {
Toast.makeText(this, "Спасибо, мы можем продолжать", Toast.LENGTH_SHORT).show()
}
}
}
}
}
private fun askUserForOpeningSettings() {
val appSettingsIntent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null)
)
if (packageManager.resolveActivity(appSettingsIntent, PackageManager.MATCH_DEFAULT_ONLY) == null) {
Toast.makeText(this, "Ура! Ну наконец-то!", Toast.LENGTH_SHORT).show()
} else {
AlertDialog.Builder(this)
.setTitle("Нужно разрешение")
.setMessage("Надо зайти в настройки и включить. Подробно лень писать")
.setPositiveButton("Open") {_, _ ->
startActivity(appSettingsIntent)
}
.create()
.show()
}
}
private companion object {
const val RQ_PERMISSION_FOR_BUTTON_1 = 1
const val RQ_PERMISSION_FOR_BUTTON_2 = 2
}
private fun onStoragePermissionGranted() {
Toast.makeText(this,"Спасибо, мы можем продолжать!", Toast.LENGTH_SHORT).show()
}
Комментарии:
1. Вы не опубликовали код, который находит файлы, но не все.
Ответ №1:
Нет. Вы никогда не сможете прочитать все файлы на своем телефоне — у каждого приложения есть свое личное хранилище, где никто другой не сможет прочитать их файлы, если они этого не разрешат. Игнорируя это — нет. Не так, как в Android 11. См. https://developer.android.com/about/versions/11/privacy/storage и https://developer.android.com/training/data-storage/manage-all-files