您如何从 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
}
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
}