【问题标题】:How do you get uri data from content intent in Kotlin?你如何从 Kotlin 的内容意图中获取 uri 数据?
【发布时间】:2021-04-11 00:32:51
【问题描述】:

Android 编程新手。当从 whatsapp、messenger、gmail 等打开具有我的自定义扩展名“.replaysecret”的附件时,我试图打开我的应用程序。该文件是我用我的扩展名重命名的 pcm 音频文件。我的应用程序正确打开,我可以看到 uri 数据,我找到了一些代码给我文件名,但我不知道如何获取文件路径或以其他方式加载文件数据。对我应该做什么有什么建议吗?

这是我的意图过滤器

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>

            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT"/>

            <data android:scheme="content"/>

            <data android:host="*"/>

            <!--  Required for Gmail and Samsung Email App  -->
            <data android:mimeType="application/octet-stream"/>

            <!--  Required for Outlook  -->
            <data android:mimeType="application/replaysecret"/>
        </intent-filter>

这是我从 uri 获取文件名的代码

    var uri = intent.data

    if(uri != null){
        var fileName: String? = null
        var cursor = contentResolver.query(uri!!, null, null, null, null)
        if (cursor != null) {
            cursor.moveToFirst()
            fileName = cursor.getString(0)
            fileName = fileName.substring(fileName.lastIndexOf(":") + 1)
            cursor.close()
        }

       //Can't figure out how to get file path or load file data
    }

如果重要的话,这是打开附件时的 uri 字符串: content://com.google.android.gm.sapi/myemail@gmail.com/message_attachment_external/%23thread-a%3Ar1178448143327120464/%23msg-a%3Ar8356029736797240583/0.1?account_type=com.google&mimeType=application&2Foctet-stream&rendition=1

【问题讨论】:

  • 您通过打开 uri 的输入流并从流中读取它们来加载文件数据。
  • 您已经在查询 uri。如果幸运,请使用 DISPLAY_NAME 列获取文件名。

标签: android kotlin android-intent uri android-contentresolver


【解决方案1】:

blackapps 的评论让我找到了解决方案

    var uri = intent.data

    if(uri != null){
        var inputStream = this.contentResolver.openInputStream(uri)
        var byteArray = inputStream!!.readBytes()

        //do stuff with byteArray
    }

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 2016-09-06
    • 2020-11-02
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多