如何在没有错误提示的情况下打开三星原生图库?

How to open the Samsung native gallery without having an error toast?

我想使用我的应用程序中的按钮打开 phone 的画廊。我正在使用这样的东西:

goToGalleryButton.setOnClickListener {
  val intent = Intent()
  intent.action = Intent.ACTION_VIEW
  intent.type = "image/*"
  intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
  startActivity(intent)
}

按下按钮后,会出现一个用于选择所需应用程序的弹出窗口。如果我选择 Google 照片应用程序,一切都很好,我可以随心所欲地查看所有图像和视频,但如果我选择三星的画廊,我会收到“不支持的文件”错误消息。

华为设备在选择本机图库应用程序时会发生类似情况。

有没有办法避免在打开本机图库应用程序时出现该错误消息?

if I choose the Samsung's gallery I get a toast with "Unsupported file" error message

当然可以。你的 Intent 坏了:

  • ACTION_VIEW 获取要查看的内容的 Uri — 你不包括
  • ACTION_VIEW 采用该内容的具体 MIME 类型——您使用的是通配符

您假设能够查看图像的应用程序的开发人员在收到有缺陷的 Intent 时会“优雅地降级”。 Google 照片显然就是这种情况。一般不会这样。

I want to open the phone's gallery using a button from my application

我将其解释为您想要执行与用户点击该应用程序的启动器图标时相同的操作。如果是:

  • ACTION_MAINCATEGORY_LAUNCHER
  • 创建一个 Intent
  • 向那个添加 a selector Intent,选择器将帮助限制选择器使用哪些应用程序

可能 CATEGORY_APP_GALLERY 将是用于选择器 Intent 的正确类别。

您可以将所有这些结合起来 using makeMainSelectorActivity():

val intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_GALLERY)
  .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)