2016-12-16 24 views
0

デバイスのCamera Flashをオン/オフできるアプリを構築しようとしています。コードではエラーは表示されませんが、デバイスでアプリを起動するとクラッシュするようになります。 レポートのバグにはUnable to start activityなどがあり、Fail to connect Camera Servicesなどが表示されます。 私はアンドロイドの開発では新しいので、十分な知識がありません。 私はすでにこれに関するいくつかの質問を見ていましたが、役に立つ情報を見つけることはできませんでした。すべての回答は、私がすでに行ったマニフェストファイルのパーミッションを使用して追加することをお勧めしていました。マニフェストファイルのAndroid:アクティビティを開始できません/カメラサービスに接続できません

内容:主な活動のJavaの

<?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> 

内容:

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

+0

あなたは画像として回答を投稿する必要がありますか? –

+0

あなたのmainfestファイルを投稿してください –

+0

正しく書いていることを確認してくださいhttp://stackoverflow.com/a/26842715/5156075 –

答えて

0

私はカメラを開くためのコードを掲示しています、必要に応じて変更してください。

はこの試してみてください。

static Camera camera = null; 

をし、次の宣言:また、それを

camera.release(); 

:カメラを使用した後

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からは、特定のタスクを実行するための実行時権限が必要なためです。

だから、あなたはアンドロイド6.0(マシュマロ)以上を使用している場合は、許可がこれに従うことによって有効かされていないことを確認してください。

をカメラの許可を無効にすることができ、アプリの設定から有効にする必要があります。設定 - >アプリ - > [あなたのアプリ] - >権限。

それが私の仕事です。ホープこのヘルプあなたも:)

EDIT とエラーlogcatを得るためにあなたのcatchブロックにe.printstacktrace()を使用してください。

0

カメラを離しているときに問題があると思います。 releasemethodonStopに書き込んだので、あなたのカメラは、アプリが終了したときにのみリリースされます。ボタンclick methodでフラッシュをオフにしているときに、カメラをreleaseにしてみてください。

+0

私はそれをやったが..まだ解決することができなかった –

0

私はどこが間違っていたのですか。上に書かれたコードは右です。唯一の問題は、私がデバイスを介してカメラの許可を得るための許可を与える必要があるmarshmallowを使用していたことです。

関連する問題