Android:无法启动活动/无法连接到相机服务

时间:2016-12-16 05:48:00

标签: android android-camera android-resources

我正在尝试构建一个可以打开和关闭设备的相机闪光灯的应用。在Code中它没有显示任何错误,但在我的设备上启动应用程序时,它开始崩溃。 报告错误显示一些Unable to start activityFail 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>

主要活动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

3 个答案:

答案 0 :(得分:0)

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

试试这个:

<ig:XamGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}" >
  <ig:XamGrid.SortingSettings>
    <ig:SortingSettings ></ig:SortingSettings>
  </ig:XamGrid.SortingSettings>
  <ig:XamGrid.Columns>
    <ig:TextColumn Key="Side" MinimumWidth="20" Width="50">
    <ig:TextColumn.HeaderTemplate>
      <DataTemplate>
        <TextBlock Text="Side" ToolTip="Trade Side"></TextBlock>
      </DataTemplate>
    </ig:TextColumn.HeaderTemplate>
  </ig:TextColumn>

  <ig:TextColumn Key="CreatedOn" MinimumWidth="30" Width="68" FormatString="{}{0:HH:mm:ss}" AllowToolTips="Always" IsSorted="Descending">    
    <ig:TextColumn.HeaderTemplate>
      <DataTemplate>
        <TextBlock Text="Created On" ToolTip="Date and time trade was created"/>
      </DataTemplate>
    </ig:TextColumn.HeaderTemplate>
    <ig:TextColumn.ToolTipContentTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding CreatedOn, StringFormat={}{0:dd/MM/yyyy HH:mm:ss:fff}}" />
      </DataTemplate>
      </ig:TextColumn.ToolTipContentTemplate>
    </ig:TextColumn>
  </ig:XamGrid.Columns>
</ig:XamGrid>

并声明以下内容:

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);
}

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

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

可以禁用相机权限,并应从应用设置启用。设置 - &gt;应用 - &gt; [您的应用] - &gt;权限。

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

修改 请使用camera.release(); 块中的e.printstacktrace()来获取错误logcat。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我遇到了错误的地方。上面写的代码是对的。唯一的问题,我使用棉花糖,我们必须通过设备获得相机许可。