在 android 6.0.1 中,检索相机照片不起作用

Posted

技术标签:

【中文标题】在 android 6.0.1 中,检索相机照片不起作用【英文标题】:in android 6.0.1, retrieving the camera photo is not working 【发布时间】:2016-02-07 14:39:33 【问题描述】:

1- 一些同事(他是使用 android studio 的 android 开发人员) 当他在我的手机上测试他的应用程序时遇到问题(这是一个带有 android 6.0.1 的 nexus 5),他面临的问题是,当他从画廊拍摄图像时,它可以正常工作,但是当拍摄来自相机的照片没有显示,他怀疑他保存在手机上的图像没有保存,他怀疑这是一个权限问题,对他来说它适用于 Galaxy 但不适用于 nexus。

2- 同样的事情发生在我身上 我买了一个插件,过去在我的手机上可以正常工作(当我拍摄相机照片时),现在在我更新后它不再拍摄图像,我的意思是我去相机并返回应用程序而没有加载任何内容像以前一样进入视图。

这就是 logcat 显示的内容

--------- beginning of main 
02-07 16:36:10.272      203-813/? D/audio_hw_primary﹕ out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2 
02-07 16:36:10.282      203-813/? D/audio_hw_primary﹕ select_devices: out_snd_device(2: speaker) in_snd_device(0: none) 
02-07 16:36:10.282      203-813/? D/msm8974_platform﹕ platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15) 
02-07 16:36:10.282      203-813/? D/audio_hw_primary﹕ enable_snd_device: snd_device(2: speaker) 
02-07 16:36:10.284      203-813/? D/audio_hw_primary﹕ enable_audio_route: apply and update mixer path: low-latency-playback 
02-07 16:36:10.289  24484-24484/? W/CAM_ActivityCloser﹕ WARNING: Activity was artificially finished: CameraActivityController was closed. 
02-07 16:36:10.302  24484-24484/? I/CAM_2RsmeActvtyFltr﹕ START onPause: Activity = com.android.camera.util.activity.DoubleOnResumeActivityFilter@d1e256d 
02-07 16:36:10.303  24484-27584/? W/CAM2PORT_AndCamAgntImp﹕ Releasing camera without any camera opened. 
02-07 16:36:10.305  24484-24484/? I/CAM_2RsmeActvtyFltr﹕ END onPause: Activity = com.android.camera.util.activity.DoubleOnResumeActivityFilter@d1e256d 
02-07 16:36:10.316  25275-25275/? D/CameraController﹕ onActivityResult 
02-07 16:36:10.316  25275-25275/? D/CameraController﹕ RESULT_OK 
02-07 16:36:10.329  25275-25275/? I/Unity﹕ **[CameraDemo] onCaptureImageFail**

为什么会这样?又该如何解决呢?

【问题讨论】:

这个问题非常困难:***.com/a/7411824/294884***.com/a/22282988/294884***.com/a/17922913/294884 参见developer.android.com/reference/android/provider/…:如果您的应用针对 M 及以上版本并声明使用未授予的 CAMERA 权限,则尝试使用此操作将导致 SecurityException。 【参考方案1】:

您必须在活动中请求许可

在你的功能中:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        if (!Settings.System.canWrite(this)) 
            requestPermissions(new String[]Manifest.permission.CAMERA,
                    Manifest.permission.CAMERA, REQUEST_CAMERA);
         else 
            takeFromCamera();
        
     else 
        takeFromCamera();
    

并将其添加到您的活动中

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
    if (requestCode == REQUEST_CAMERA) 
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 
                takeFromCamera();
             else 
                Log.e("Permission", "Denied");
            
    

在清单中:

<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

【讨论】:

【参考方案2】:

我对团结知之甚少,如果这没有帮助,请原谅我。 一般来说,为了让所有关于使用相机硬件和将图像存储在原生 android 中的一切正常工作,androidmanifest.xml 文件应该在应用程序标签中包含以下内容:

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

要从统一调整清单文件,这是我找到的指南: https://matthewongamedesign.wordpress.com/2013/06/08/unity-and-the-android-manifest-file/

【讨论】:

这没有帮助,还是一样。【参考方案3】:

解决方案是在警报中请求权限,而不仅仅是在清单中授予权限。

【讨论】:

你能澄清一下你的意思吗?我在启动 ACTION_IMAGE_CAPTURE 意图时收到此错误消息,它不需要任何权限(因为您的应用不是实际与相机对话的应用)【参考方案4】:

看起来确实是运行时权限检查问题。 Android 从 API 23(marshmallow) 开始引入了运行时权限检查。

http://developer.android.com/training/permissions/requesting.html

我希望这会有所帮助。

【讨论】:

是的,我已经在一小时前在下面写了答案并接受了它,谢谢gaurav4sarma。 很抱歉,但我认为这对所有未来的访问者都有帮助,因为您的回答从未提及运行时权限检查,因此没有提及链接。无论如何,没关系,我希望某个地方的人觉得它有帮助,问候【参考方案5】:

您是否提供了访问图库的权限?请发布您的代码..

【讨论】:

gaurav4sarma 发布的一个:developer.android.com/training/permissions/requesting.html

以上是关于在 android 6.0.1 中,检索相机照片不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android 让用户从图库或相机中挑选/捕捉照片

检索照片时相机崩溃

在android中设置相机拍摄的图像?

如何拍照,保存并在Android中获取照片

opencv for android中使用照相机前置摄像头是照片是颠倒的?

Android 使用系统相机拍照和读取相册照片