您如何从 Kotlin 的内容意图中获取 uri 数据?

How do you get uri data from content intent in Kotlin?

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

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

    var uri = intent.data

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

        //do stuff with byteArray
    }