Android:Camera.Open()对一个项目返回null,但对另一个项目不返回null。同样的装置

Android:Camera.Open()对一个项目返回null,但对另一个项目不返回null。同样的装置,android,android-camera,android-permissions,Android,Android Camera,Android Permissions,我正在学习Android摄像头Api,并在Nexus6设备上进行测试。我下载了一个摄像头Api教程,该教程在设备上运行良好。然后,我创建了自己的项目,基本上复制了代码,但每当我调用Camera.open()时,该项目总是返回null。代码实际上是相同的 清单和我的gradle文件也是一样的 但是我从网站下载的教程可以正常工作,而我从Android Studio创建的教程却不能正常工作 我不知道我做错了什么。我已经检查了之前关于这个问题的问题,我没有犯同样的错误。清单权限位于正确的位置(应用程序标

我正在学习Android摄像头Api,并在Nexus6设备上进行测试。我下载了一个摄像头Api教程,该教程在设备上运行良好。然后,我创建了自己的项目,基本上复制了代码,但每当我调用Camera.open()时,该项目总是返回null。代码实际上是相同的

清单和我的gradle文件也是一样的

但是我从网站下载的教程可以正常工作,而我从Android Studio创建的教程却不能正常工作

我不知道我做错了什么。我已经检查了之前关于这个问题的问题,我没有犯同样的错误。清单权限位于正确的位置(应用程序标记上方),Nexus 6有一个后置摄像头,因此没有摄像头不是问题

非工作舱单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gr3ymatter.cameraapidemo">
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
非工作表面查看类

import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.IOException;

/**
 * Created by Afzal on 2/2/16.
 */

public class ImageSurfaceView extends SurfaceView implements SurfaceHolder.Callback {

    private Camera camera;
    private SurfaceHolder surfaceHolder;

    public ImageSurfaceView(Context context, Camera camera) {
        super(context);
        this.camera = camera;
        this.surfaceHolder = getHolder();
        this.surfaceHolder.addCallback(this);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            this.camera.setPreviewDisplay(holder);
            this.camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        this.camera.stopPreview();
        this.camera.release();
    }
}
工作项目文件与我在遵循示例时从字面上复制的文件相同。我可以粘贴一个github链接到工作项目和非工作项目,如果这有帮助的话

编辑:以下是这两个项目的回购协议

编辑:LOGCAT输出。同样基于Madhur的有用评论,我认为这可能是一个设备问题,所以我在Nexus7上运行了这个,但我仍然遇到了同样的问题


提前感谢您的帮助

由于Android 6.0,您需要在nexus 6中请求权限 查看有关的更多信息

或者您可以在清单中更改为

//make target lower then 23 then it will run properly in android M
    <uses-sdk
            android:minSdkVersion="15"
            android:targetSdkVersion="22" />
//将目标设置为低于23,然后它将在android M中正常运行
没有权限的示例

检查这个例子,希望它有帮助

你的代码对我有用


由于Android 6.0,您需要在nexus 6中请求权限 查看有关的更多信息

或者您可以在清单中更改为

//make target lower then 23 then it will run properly in android M
    <uses-sdk
            android:minSdkVersion="15"
            android:targetSdkVersion="22" />
//将目标设置为低于23,然后它将在android M中正常运行
没有权限的示例

检查这个例子,希望它有帮助

你的代码对我有用


感谢您的评论,不幸的是,这样做并没有改变任何事情。令人困惑的是,工作项目与我的项目具有相同的权限。dude在清单中查看targetsdk,在gradle中查看CompliatedSDK,它应该在22以下,并且还检查workedI检查的项目。我也在这里张贴了这两个项目的回购协议,这样你就可以自己看看了。manifest和gradle文件是相同的,高于22。两者都设置为23。我有一些时间,所以我检查了你的代码,它工作得很好。我将在我的回答中分享它的屏幕截图。非常感谢你抽出时间。这很有趣。我想知道为什么我的Nexus6不工作..我用在NOTWORKING代码中得到的logcat输出截图更新了答案。我一直在为摄影机对象设置null。请注意,包名称是相同的。我的工作代码没有任何这样的问题。起初我认为相机可能没有正常释放,可能很忙,但它在工作代码中工作正常。奇怪。谢谢你的评论,不幸的是这样做并没有改变任何事情。令人困惑的是,工作项目与我的项目具有相同的权限。dude在清单中查看targetsdk,在gradle中查看CompliatedSDK,它应该在22以下,并且还检查workedI检查的项目。我也在这里张贴了这两个项目的回购协议,这样你就可以自己看看了。manifest和gradle文件是相同的,高于22。两者都设置为23。我有一些时间,所以我检查了你的代码,它工作得很好。我将在我的回答中分享它的屏幕截图。非常感谢你抽出时间。这很有趣。我想知道为什么我的Nexus6不工作..我用在NOTWORKING代码中得到的logcat输出截图更新了答案。我一直在为摄影机对象设置null。请注意,包名称是相同的。我的工作代码没有任何这样的问题。起初我认为相机可能没有正常释放,可能很忙,但它在工作代码中工作正常。奇怪的