Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法连接到照相机服务_Android - Fatal编程技术网

Android 无法连接到照相机服务

Android 无法连接到照相机服务,android,Android,我正在尝试使用手机上的摄像头。在将代码放入小部件之前,我正在编写一个简单的存根应用程序。我没走多远。该代码始终引发运行时异常“无法连接到摄像头服务”。出错的代码(摘自一个Commonware示例)是: @Override public void onResume() { super.onResume(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {

我正在尝试使用手机上的摄像头。在将代码放入小部件之前,我正在编写一个简单的存根应用程序。我没走多远。该代码始终引发运行时异常“无法连接到摄像头服务”。出错的代码(摘自一个Commonware示例)是:

    @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)
等
我不知道为什么我没有权限,因为它在清单中声明了一些事情:

  • 为什么您的“活动”标记中包含“使用权限”和“使用功能”标记。通常,权限包括在
    标记的直接子项中。这可能是问题的一部分

  • 根据android,会引发运行时异常:

    如果与摄像头服务的连接失败(例如,如果另一个进程或设备正在使用摄像头,则策略管理器已禁用该摄像头)

    您是否尝试过检查摄像头是否正被其他人使用,或者您的策略管理器是否有关闭摄像头的设置

  • 不要忘记自动对焦的

  • 虽然我不确定这些是否会直接帮助你,但我认为它们值得调查,如果没有其他原因,只是为了简单地排除。尽职调查,如果你愿意的话

    编辑
    如下面的评论所述,解决方案是将
    使用权限
    移动到应用程序标记上方。

    确保在不再需要相机时调用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);
    }