Фотографии Google Редактировать намерение ограничено только для медиа -URI, почему?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Фотографии Google Редактировать намерение ограничено только для медиа -URI, почему?

Сообщение Anonymous »

Я пытаюсь отредактировать (

Код: Выделить всё

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
) Такой медиа -файл на фотографиях Google работает нормально и не требует медиа -URI:

Код: Выделить всё

    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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»