android 的默认图库和相机意图是不是适用于所有设备?

Posted

技术标签:

【中文标题】android 的默认图库和相机意图是不是适用于所有设备?【英文标题】:Is android's default gallery and camera intents available in all devices?android 的默认图库和相机意图是否适用于所有设备? 【发布时间】:2018-08-10 23:56:13 【问题描述】:

android 中有 2 种众所周知的方法可以使用 android 的默认意图获取图像。

画廊意图

要从图库中挑选图片,我们通常这样做:

    Intent intent =new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, 1);

相机意图

要打开相机并拍摄图像,我们通常这样做:

    Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, 2);

最后我们在 onActivityResult 回调中得到结果。

问题

我注意到一些聊天应用(知名的)使用自定义图库选择器和自定义摄像头捕获方法。

他们不使用android的默认方法,这似乎是更简单的方法。

所以我的问题是,是否所有的安卓设备(主要是安卓4及以上)都支持以上两种方法?

我需要确保所有设备都支持上述方法。

谢谢。

【问题讨论】:

所有设备必须支持此意图操作,但您知道有时制造商会搞砸。我认为自定义图库和相机选择器主要是为了将整个应用程序粘贴到相同的 UI,或者在拍照时控制相机等。 @VladyslavMatviienko 我发现了(存储访问框架)我不知道它是否相关,它可能是一种新的图像挑选方式? 我认为这与问题无关 【参考方案1】:

特定设备存在一些问题,尤其是三星、小米。但他们正在变得更好。 一般来说,它应该在每台设备上都可用,但现实开始了。

示例。

Camera intent not working with Samsung Galaxy S3

Selecting image from gallery not working on Redmi Note 4

Camera intent for ACTION_IMAGE_CAPTURE does not appear on Samsung Galaxy Nexus(4.0.2)

【讨论】:

如果可以通过 Intent 获得,为什么其他应用会构建自定义图库? 我认为,因为他们希望将客户画廊纳入他们的设计标准。他们可能会认为默认图库不好看。 也许是这样,但我也找到了所谓的(存储访问框架),不知道是和上面的意图有关还是新的取文件方式?有什么想法吗? 我认为这是新的方式,完全不同的意图和不同的方式来获得实际结果【参考方案2】:

是的,这些意图是标准 Android 的一部分。确实,在极少数情况下,设备制造商搞砸了,但更糟糕的情况是最终用户安装了 3rd 方相机应用程序,或者可以与 Gallery 一起使用的应用程序。在这种情况下,系统允许最终用户选择满足意图的应用程序之一。其中一些第 3 方应用程序不完全符合协议,或者有意想不到的副作用。

这就是为什么最好的做法是在应用内实现自定义相机,适用于所有希望您经常使用相机的应用。

【讨论】:

【参考方案3】:

是的,这是 Android 操作系统的基本功能,因此它内置于所有 Android 设备中。

但在 android 版本的棉花糖之后,您必须获得相应的许可。

【讨论】:

ACTION_IMAGE_CAPTURE 仅在应用列出此权限时才需要相机权限(例如,另一部分启动自定义相机)。 是的,需要棉花糖运行时权限。

以上是关于android 的默认图库和相机意图是不是适用于所有设备?的主要内容,如果未能解决你的问题,请参考以下文章

Android从图库或相机显示选项中选择图像

从android中的意图选择器中选择选项(相机或画廊)后请求权限

Android 应用程序在辅助 ACTION_PICK 意图后没有响应

Android - 相机和画廊意图后的裁剪给出了奇怪的结果

使用适用于 Android 7.1.1 的 FileProvider 使用相机拍照后,我无法将文件保存到图库

让用户拍照或从 Android 中的图库中选择图像的单一意图