【发布时间】: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