9

フラッター アプリがメディア ファイルを Android フォン ギャラリーからアプリに直接共有するための機能を Kotlin で作成しました。

Realme 3 Pro、Oneplus 6t、Samsung m40 など、テストした多くのデバイスで正常に動作します。

しかし、Asus Zenfone Max Pro M2メディアファイルを共有すると、奇妙で​​不完全なものを受け取りましたURI&path

Kotlin コードからのログ

D/URI =====(26032) : content://com.android.providers.downloads.documents/document/624

D/パス =====(26032): /document/624

Kotlin コード

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
    this.binding = binding
    binding.addOnNewIntentListener(this)
    handleIntent(binding.activity.intent, true)
}
----------------------------------------------------------------------
private fun handleIntent(intent: Intent, initial: Boolean) {
    when {
        (intent.type?.startsWith("text") != true)
                && (intent.action == Intent.ACTION_SEND
                || intent.action == Intent.ACTION_SEND_MULTIPLE) -> { // Sharing images or videos

            val value = getMediaUris(intent)
            if (initial) initialMedia = value
            latestMedia = value
            eventSinkMedia?.success(latestMedia?.toString())
        }
...
----------------------------------------------------------------------
private fun getMediaUris(intent: Intent?): JSONArray? {
    if (intent == null) return null

    return when (intent.action) {
        Intent.ACTION_SEND -> {
            val uri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)
            Log.d("URI =====",uri)
            val path = uri?.let{ FileDirectory.getPathFromUri(applicationContext, it) } ?: uri?.path
            Log.d("Path =====",path)
            if (path != null) {
...

デバイス情報

Device Name: Asus Zenfone Max Pro M2
Android Version: 9
External SD card: present

この URI を解決し、ファイル名と拡張子を含む適切なパスを取得するにはどうすればよいですか?

4

1 に答える 1