Класс FileProvider
Класс FileProvider из AndroidX
наследует ContentProvider
и выдаёт временный content:// URI
на файл в каталоге приложения.
Прямой URI схемы file
для обмена между приложениями не подходит:
получатель не имеет прав на чужой путь.
URI строят статическим методом
getUriForFile с authority из манифеста.
URI передают в Intent
с флагом FLAG_GRANT_READ_URI_PERMISSION.
Синтаксис
FileProvider.getUriForFile(context, authority, file)
Пример
Давайте получим content URI для файла в cache:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.core.content.FileProvider
import java.io.File
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val file = File(cacheDir, "abcde.txt")
file.writeText("12345")
val uri = FileProvider.getUriForFile(
this,
"${packageName}.fileprovider",
file,
)
setContent {
Text(text = uri.scheme ?: "abcde")
}
}
}
На экране текст "content" как схема URI,
готового для передачи другому приложению.
Смотрите также
-
класс
Intent,
в который кладут uri файла -
класс
Context,
который передают в getUriForFile -
метод
startActivity,
которым открывают viewer с uri -
класс
LocalContext,
который даёт context для FileProvider в Compose