使用Android 6.0未经许可捕获图像

sta*_*ken 13 permissions camera android android-intent android-6.0-marshmallow

我需要让用户使用Android 6.0拍摄照片(来自图库或相机应用).

因为我不需要控制相机,所以我想使用这里描述的意图:

但是,如果您不需要此类控件,则可以使用ACTION_IMAGE_CAPTURE意图来请求图像.当您启动意图时,系统会提示用户选择相机应用程序(如果还没有默认的相机应用程序),该应用程序将拍摄照片.相机应用程序将图片返回到应用程序的onActivityResult()方法.

https://developer.android.com/preview/features/runtime-permissions.html

但是对于这个ACTION_IMAGE_CAPTURE,你需要将额外的"MediaStore.EXTRA_OUTPUT"这个Uri 填充到一个临时文件中(没有这个参数我将只有一个缩略图).此临时文件必须位于外部存储中(可由相机应用程序访问).您需要WRITE_EXTERNAL_STORAGE权限才能在外部存储上创建文件.

因此,如果没有android.permission.CAMERAandroid.permission.WRITE_EXTERNAL_STORAGE 权限,则无法通过原生对话框/应用程序捕获图像.那是对的吗?

谢谢

Jon*_*ste 11

试试这个:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(getActivity().getApplicationContext().getExternalFilesDir(android.os.Environment.DIRECTORY_PICTURES).getAbsolutePath() + File.separator + "yourPicture.jpg");
Uri uri = Uri.fromFile(file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, url);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这使您可以访问可写入相机应用程序的"外部"存储空间,但文件只能从您的应用程序中看到.要在Android中学习更多关于存储空间的信息,请参阅https://www.youtube.com/watch?v=C28pvd2plBA

希望它能帮到你!

  • 这是我到目前为止发现的唯一一个在Android 6上没有中断的工作解决方案.:) (2认同)

Der*_*ung 6

如果您在Android 4.4及更高版本上,可以将MediaStore.EXTRA_OUTPUT指定为特定包的目录下的文件

从Android 4.4开始,现在基于目录结构综合了外部存储设备上文件的所有者,组和模式。这使应用程序可以在外部存储上管理其特定软件包的目录,而无需它们拥有广泛的WRITE_EXTERNAL_STORAGE权限。例如,包名称为com.example.foo的应用现在可以在没有权限的外部存储设备上自由访问Android / data / com.example.foo /。通过将原始存储设备包装在FUSE守护程序中,可以实现这些综合权限。

https://source.android.com/devices/storage/

  • 您实际尝试过吗?这使您的应用可以访问目录,但不能访问CAMERA应用,这就是问题所在。 (2认同)