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

时间:2016-02-07 14:39:33

标签: android unity3d camera android-6.0-marshmallow

1 - 一些同事(使用android studio的android开发人员) 当他在我的手机上测试他的应用程序时遇到了问题(这是与android 6.0.1的关系),他面临的问题是,当他从一个画廊拍摄图像时,它可以和他一起工作,但是相机中的照片没有显示,他怀疑他在手机上保存的图像没有得到保存,他怀疑这是一个许可问题,因为它适用于银河系,但不适用于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**

为什么会这样?以及如何解决?

4 个答案:

答案 0 :(得分:2)

您必须在活动中申请许可

在您的函数中:

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" />

答案 1 :(得分:1)

我不太了解团结并原谅我,如果这没有帮助。 通常,为了使所有内容在使用相机硬件和将图像存储在本机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" />

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您是否已获得访问图库的权限?请发布您的代码..