Android 无法连接到照相机服务
我正在尝试使用手机上的摄像头。在将代码放入小部件之前,我正在编写一个简单的存根应用程序。我没走多远。该代码始终引发运行时异常“无法连接到摄像头服务”。出错的代码(摘自一个Commonware示例)是:Android 无法连接到照相机服务,android,Android,我正在尝试使用手机上的摄像头。在将代码放入小部件之前,我正在编写一个简单的存根应用程序。我没走多远。该代码始终引发运行时异常“无法连接到摄像头服务”。出错的代码(摘自一个Commonware示例)是: @Override public void onResume() { super.onResume(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info = new Camera.CameraInfo();
for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
try {
// Gets to here OK
camera = Camera.open(i);
} catch (Exception e) {
e.printStackTrace();
// throws runtime exception :"Failed to connect to camera service"
}
}
}
}
}
@覆盖
恢复时公开作废(){
super.onResume();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.gingerbrand){
Camera.CameraInfo info=新建Camera.CameraInfo();
对于(int i=0;i
我的舱单是(10月20日更正):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nbt.cameratest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="9" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".CameraTestActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</application>
</manifest>
有人能提出可能的问题吗
10月20日更新
SDK 4.0中的Logcat已损坏,不会显示日志的结尾,因此我已从命令行adb Logcat中尽可能地减少了这一点:
W/ServiceManager( 2588): Permission failure: android.permission.CAMERA from uid=10136 pid=5744
E/CameraService( 2588): Permission Denial: can't use the camera pid=5744, uid=10136
W/System.err( 5744): java.lang.RuntimeException: Fail to connect to camera service
W/System.err( 5744): at android.hardware.Camera.native_setup(Native Method)
W/System.err( 5744): at android.hardware.Camera.<init>(Camera.java:294)
W/System.err( 5744): at android.hardware.Camera.open(Camera.java:255)
etc..
W/ServiceManager(2588):权限失败:android.Permission.CAMERA from uid=10136 pid=5744
E/CameraService(2588):权限拒绝:无法使用摄像头pid=5744,uid=10136
W/System.err(5744):java.lang.RuntimeException:无法连接到摄像头服务
W/System.err(5744):在android.hardware.Camera.native_设置中(本机方法)
W/System.err(5744):在android.hardware.Camera.(Camera.java:294)
W/System.err(5744):位于android.hardware.Camera.open(Camera.java:255)
等
我不知道为什么我没有权限,因为它在清单中声明了一些事情:
标记的直接子项中。这可能是问题的一部分
如下面的评论所述,解决方案是将
使用权限
移动到应用程序标记上方。确保在不再需要相机时调用release()方法释放相机,否则您将无法使用相机。也许作为一种精神检查,看看你的普通相机是否工作正常。如果它说它失败了,那么您以前在runni上运行代码一百次的尝试可能会影响相机的错误运行。您的活动可能执行正确,但系统无法购买它。因此相机强制停止。
一个主要的技巧是重新启动你的手机,而不仅仅是eclipse。它对我有用。我知道这个问题很久以前就得到了回答,但我想补充一点 对于每个有相同错误的人,请确保在清单文件中添加此权限:
<uses-permission android:name="android.permission.CAMERA" />
重要使用
摄像头的大写字母
,因为我有使用小写字母的权限,但它不起作用。对于支持每个应用设置权限的较新android版本(自Marshmallow,6.0以来)摄像头权限可能被禁用,应通过应用程序设置启用。该问题与权限有关。将以下代码复制到onCreate()方法中。这个问题会得到解决
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] {Manifest.permission.CAMERA}, 1);
}
}
然后等待用户操作并处理他的决定
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case CAMERA_PERMISSION_REQUEST_CODE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Start your camera handling here
} else {
AppUtils.showUserMessage("You declined to allow the app to access your camera", this);
}
}
}
我也有同样的问题。尝试了这里提到的所有解决方案,但没有任何效果。所以我重新启动了我的设备,突然问题解决了。因为这个问题在4年前被问到了..我没有意识到,除非提问者提到..当没有运行时权限支持时 但是希望它对仍然处于这种情况的用户有用。。 看看,对我来说,它解决了问题 当我添加运行时权限以授予相机访问权限时。 或者您可以通过转到出现的窗口中的移动设置=>Apps=>(选择您的应用=>permissions部分并启用/禁用所需的权限,手动授予应用权限。
希望这能奏效 我也遇到了同样的问题,我正在分享我是如何解决的。它可能会帮助一些人 首先,检查你的Android版本。如果它运行在Android 6.0和highe上(API级别23+),那么您需要:
有关更多信息,请在使用camera.open时查看API文档;使用完摄像机后,写下这个摄像机。release();这将停止摄像头,以便您可以再次使用它您可以为我们提供带有异常的Logcat输出吗?现在没有什么可看的,因为异常现在在catch块中显示为“null”!?正如问题标题中所述。logcat只显示一个NPE。因此,异常会在调用Camera.Open()的地方抛出?是的,Camera当然为null,如此类推
**<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />**
<application ...>
...
</application>
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// here, Permission is not granted
ActivityCompat.requestPermissions(this, new String[] {android.Manifest.permission.CAMERA}, 50);
}