Android:Camera.Open()对一个项目返回null,但对另一个项目不返回null。同样的装置
我正在学习Android摄像头Api,并在Nexus6设备上进行测试。我下载了一个摄像头Api教程,该教程在设备上运行良好。然后,我创建了自己的项目,基本上复制了代码,但每当我调用Camera.open()时,该项目总是返回null。代码实际上是相同的 清单和我的gradle文件也是一样的 但是我从网站下载的教程可以正常工作,而我从Android Studio创建的教程却不能正常工作 我不知道我做错了什么。我已经检查了之前关于这个问题的问题,我没有犯同样的错误。清单权限位于正确的位置(应用程序标记上方),Nexus 6有一个后置摄像头,因此没有摄像头不是问题 非工作舱单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创建的教程却不能正常工作 我不知道我做错了什么。我已经检查了之前关于这个问题的问题,我没有犯同样的错误。清单权限位于正确的位置(应用程序标
<?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。请注意,包名称是相同的。我的工作代码没有任何这样的问题。起初我认为相机可能没有正常释放,可能很忙,但它在工作代码中工作正常。奇怪的