我正在编写一个应用程序,允许用户从 SD 卡中选择多个音乐曲目并播放它们。我正在尝试使用 Intent 系统来选择多个媒体实例,但我只能找到一种方法来选择单个项目。
这是我正在使用的代码:
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, REQUEST_MEDIA);
由于有一个操作“ACTION_SEND_MULTIPLE”,我认为也会有多个版本的选择操作,但我找不到任何版本。那么,是否可能?如果可以,该采取什么行动?
不幸的是我也遇到了同样的问题。无法使用 Intent.ACTION_PICK 选择多个项目。我采取的方法是创建自己的自定义 GridView 供用户选择多个项目。您可以采用类似的方法在自定义视图中显示所有 mp3 文件。
我认为所选答案不正确。 这取决于将打开的应用程序来选择文件(图像、视频等)。
例如,如果您安装了 Google Photos,确实可以 使用
Intent.ACTION_PICK
来显示多个图像。
val pickIntent = Intent(Intent.ACTION_PICK).apply {
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
setType("image/*")
}
这将打开 Google Photos,并为用户提供选择多个照片的选项 长按图像。
Contract
活动结果将是clipData。
override fun parseResult(resultCode: Int, intent: Intent?): List<Uri> {
return intent?.takeIf { resultCode == RESULT_OK }?.getClipDataUris() ?: emptyList()
}
/**
* @see ActivityResultContracts.GetMultipleContents
*/
private fun Intent.getClipDataUris(): List<Uri> {
// Use a LinkedHashSet to maintain any ordering that may be
// present in the ClipData
val resultSet = LinkedHashSet<Uri>()
data?.let { data ->
resultSet.add(data)
}
val clipData = clipData
if (clipData == null && resultSet.isEmpty()) {
return emptyList()
} else if (clipData != null) {
for (i in 0 until clipData.itemCount) {
val uri = clipData.getItemAt(i).uri
if (uri != null) {
resultSet.add(uri)
}
}
}
return ArrayList(resultSet)
}