Код: Выделить всё
Intent.ACTION_EDIT< /code>) Media File App из частной папки приложения в Google Photos,
, но кажется, что Google Фотографии поддерживает только медиа -URI, и мы не можем получить его для частного хранилища приложения, файл должен быть общедоступным. < /p>
private const val GOOGLE_PHOTOS = "com.google.android.apps.photos"
fun editVideoFile(context: Context, inputUri: Uri, mimeType: String) {
val uri = getUriForAppDirIfNeeded(context, inputUri)
// ways to get media uri
// but it won't work for app's private files at
// `data/user/0/com.test.example/files/*`
// MediaStore.getMediaUri(context, uri)
// MediaScannerConnection.scanFile(
// context,
// arrayOf(file.absolutePath),
// null
// ) { path, uri ->
// val mediaUri = uri.toString().replace("images/media", "file")
// .replace("video/media", "file").toUri()
// }
try {
val intent = Intent(Intent.ACTION_EDIT).apply {
setPackage(GOOGLE_PHOTOS)
setDataAndType(
/* data = */ uri, // HAS TO BE MEDIA URI (a public file), other won't work...
/* type = */ mimeType
)
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
}
context.startActivity(intent)
} catch (e: Throwable) {
openAppInGooglePlay(context, GOOGLE_PHOTOS)
}
}
private fun getUriForAppDirIfNeeded(
context: Context,
uri: Uri,
): Uri {
try {
val file = uri.toFile()
@Suppress("DEPRECATION")
if ((context.externalMediaDirs.filterNotNull() + context.filesDir).any { file.startsWith(it) }) {
return FileProvider.getUriForFile(
context,
"${context.packageName}.provider",
file
)
}
} catch (e: Throwable) {
// ignore
}
return uri
}
< /code>
Но открытие (Intent.ACTION_VIEW
Код: Выделить всё
fun openFileInVideoPlayer(context: Context, uri: Uri, mimeType: String) {
try {
val intent = Intent(Intent.ACTION_VIEW).apply {
setPackage(GOOGLE_PHOTOS)
setDataAndType(
/* data = */ getUriForAppDirIfNeeded(context, uri),
/* type = */ mimeType
)
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
}
context.startActivity(intent)
} catch (e: Throwable) {
openAppInGooglePlay(context, GOOGLE_PHOTOS)
}
}
< /code>
Пример примера приложений Приватный URI: < /p>
Приятный файл приложения:
file:///data/user/0/com.test.example/files/records/2025-04-30%2023h%2023m%2004s.mp4
URI для внешних приложений через FileProvider (после вызова geturiforAppDiRifneededed function):
Код: Выделить всё
content://com.test.example.provider/records/2025-04-30%2023h%2023m%2004s.mp4
Но редактирование Google Редактировать только (открывается) с помощью медиа -URI:
Код: Выделить всё
content://media/external_primary/file/1000005008
для не мультимедиа URI существует ошибка, редактирование видео не поддерживается для указанного видеофайла
Подробнее здесь: https://stackoverflow.com/questions/796 ... i-only-why