【问题标题】:Android : Unable to start activity / Fail to connect to Camera serviceAndroid:无法启动活动/无法连接到相机服务
【发布时间】:2016-12-16 05:48:00
【问题描述】:

我正在尝试构建一个可以打开和关闭我设备的相机闪光灯的应用程序。在代码中它没有显示任何错误,但是在我的设备上启动应用程序时它开始崩溃。 报告错误显示一些 Unable to start activity 和类似 Fail to connect Camera Services 的内容。 由于我是android开发的新手并且没有足够的知识。 我已经看到了一些关于此的问题,但无法找到一些有用的信息。所有答案都大致建议在清单文件中添加使用权限,我已经这样做了。

清单文件内容:

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

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

</manifest>

Main-activity Java 的内容:

package com.example.joshiyogesh.flashlight;

import android.content.pm.PackageManager;
import android.graphics.Color;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Button btn;
    android.hardware.Camera camera;
    Camera.Parameters parameters;
    boolean isFlash = false;
    boolean isOn = false;
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button)findViewById(R.id.button2);
        if(getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
        {
            camera = Camera.open();
            parameters = camera.getParameters();
            isFlash = true;
        }
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             if(isFlash){
                 if(!isOn){
                     btn.setText("Off");
                     btn.setBackgroundColor(Color.GREEN);
                     parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                     camera.setParameters(parameters);
                     camera.startPreview();
                     isOn = true;
                 }
                 else{
                     btn.setText("ON");
                     btn.setBackgroundColor(Color.RED);
                     parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                     camera.setParameters(parameters);
                     camera.stopPreview();
                     isOn = false;
                 }
             }

             else{
                 Toast.makeText(MainActivity.this,"Camera Not detecting",Toast.LENGTH_LONG).show();

             }

            }
        });
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(camera!=null){
            camera.release();
            camera = null;
        }
    }
}

I have uploaded image of report bug of my mobile device

【问题讨论】:

  • 您需要将答案发布为图片吗?
  • 发布你的 mainfest 文件
  • @JohnJoe 先生,我已上传清单文件。请看一下

标签: android android-camera android-resources


【解决方案1】:

我正在发布打开相机的代码,请根据您的需要进行更改。

试试这个:

static Camera camera = null;

并声明以下内容:

 try{ 
 if(clickOn == true) {
   clickOn = false;
   camera = Camera.open();
   Parameters parameters = camera.getParameters();
   parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
   camera.setParameters(parameters);
   camera.startPreview();

   remoteViews.setViewVisibility(R.id.button1, View.GONE);
   remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
   localAppWidgetManager.updateAppWidget(componentName, remoteViews);
  } else {
   clickOn = true;
   camera.stopPreview();
   camera.release();
   camera = null;

   remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
   remoteViews.setViewVisibility(R.id.button2, View.GONE);
   localAppWidgetManager.updateAppWidget(componentName, remoteViews);
 }    
} catch(Exception e) {
     Log.e("Error", ""+e);
}

使用相机后,别忘了通过以下语句释放它:

camera.release();

也可能是您的应用在运行时未获得打开相机的权限。因为从 android 6.0 开始,必须要有运行时权限才能执行特定任务。

所以如果您使用的是Android 6.0(Marshmallow) 或更高版本,请按照以下步骤检查权限是否启用:

相机的权限可以被禁用,应该从应用设置中启用。设置 -> 应用程序 -> [您的应用程序] -> 权限。

这对我有用。希望这对你也有帮助:)

编辑 并且请在您的catch 块中使用e.printstacktrace() 来获取错误logcat。

【讨论】:

    【解决方案2】:

    我认为释放相机时有问题。由于您在onStop 中写了release method,因此只有在关闭应用程序时,您的相机才会被释放。当你关闭闪光灯按钮click method时尝试release相机。

    【讨论】:

      【解决方案3】:

      我知道我错了。上面写的代码是正确的。唯一的问题,我使用的是棉花糖,我们必须授予通过设备获取相机权限的权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        • 2016-01-21
        • 2021-12-25
        相关资源
        最近更新 更多