2013-07-07 23 views
7

ボタンを押すとフラッシュライトをオンにするアプリを書こうとしています。問題は、アプリが私の電話でフラッシュライトを検出していないことです。私はインターネット上でたくさん検索しました。確かに他の人が問題に直面しているが、私はこれらのソリューションも適用したが、うまくいかないようだ。私はこの問題の原因を知りません。ここにコードを投稿する:フラッシュライトが検出されない

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_starting_point); 

    if(! getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) // checking if flash light is available inn android phone 
    { 
     Toast.makeText(StartingPoint.this, "Sorry this app can't work without flash light", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 

    cam = Camera.open(); 

    param = cam.getParameters(); 


} 

@Override 
public void onClick (View v) 
{ 
     if(!flashOn) 
     { 
      i=0; 

      flashOn=true; 

      param.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      cam.setParameters(param); 
      cam.startPreview(); 
     } 
     else{ 
       i=0; 

       flashOn=false; 

       param.setFlashMode(Parameters.FLASH_MODE_OFF); 
       cam.setParameters(param); 
       cam.stopPreview(); 
      } 

}

私もAndroidのマニフェストでこれらの権限を追加しました。

<uses-permission android:name="android.permission.FLASHLIGHT"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

よろしく

+1

これらの行を挿入しようとしましたか?cam = Camera.open(); param = cam.getParameters();あなたの最初のif()文の前にonCreate()? – CENT1PEDE

+0

すべてのデバイスでこれをテストしましたか? –

+0

XOLO A600またはMoto Gで@ Ilya_Gazmanのコードをテストしてください... – Niko

答えて

0

私はあなたがもう一度あなたのparamsを設定していないと思う: 私は懐中電灯があるかどうかを確認するためにこれを使用:

public static Boolean hasFlashLight(Context context){ 
    return context.getApplicationContext().getPackageManager() 
      .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 
} 

し、それをオフにし、上のために:

Parameters params = mCamera.getParameters(); 
if (!isFlashlightOn) { 
    params.setFlashMode(Parameters.FLASH_MODE_OFF); 
} else { 
    params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
} 
mCamera.setParameters(params); 

それがあなたにも役立つかどうか教えてください。

+0

これは問題ではありません。これは既に実装されています – Niko

+0

これはどのデバイスでテストしていますか?他のデバイスで同じ問題がありますか? –

0

私は同じ問題を抱えていました。これを使用してください

if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { 
    //Flash ok 
    Parameters params = mCamera.getParameters(); 
    params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
} else { 
    //Flash not supported 
} 

あなたのデバイスがフラッシュを持っているかどうかを確認してください。

2

私は、懐中電灯機能をチェックするアプリを持っており、正常に動作します。ここで私は、ユーザーが光を持っているかどうかをチェックするために使用されるコードです:

if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
    new AlertDialog.Builder(this) 
    .setTitle("Sorry") 
    .setMessage("It appears that your device is incompatible with this app. Sorry for the inconvenience.") 
    .setNeutralButton("Close", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface arg0, int arg1) { 
      finish(); 
     } 
    }).show(); 
    return; 
} 

実際に軽作業をするためには、私は、トグルボタンを作り、次のコードを書いた:

private boolean isLightOn = false; 
private Camera camera; 
private ToggleButton button; 
public Vibrator v; 

if (camera == null) { 
    camera = Camera.open(); 
} 

final Parameters p = camera.getParameters(); 

button.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 

     if (isLightOn) { 

     Toast.makeText(context, "Light off!", Toast.LENGTH_SHORT).show(); 
     v.vibrate(40); 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(p); 
     camera.stopPreview(); 
     isLightOn = false; 

     } else { 

      Toast.makeText(context, "Light on!", Toast.LENGTH_SHORT).show(); 
     v.vibrate(40); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 
     camera.startPreview(); 
     isLightOn = true; 

     } 

    } 
}); 

そして最後に、ここで私が使用した唯一の権限です:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 

注:上記のコードのすべてが私の活動ののonCreateメソッドです。

希望すると、問題を解決するのに役立ちます。

0

表面ホルダが必要なカメラもあれば、フラッシュをブロックするものもあります。

SurfaceView preview = (SurfaceView) findViewById(...); 
SurfaceHolder holder = preview.getHolder(); 
holder.addCallback(this); 
Camera camera = Camera.open(); 
camera.setPreviewDisplay(holder); 
+0

それは本当ですか?これは動作しますか? – Niko

+0

@ニコいいえ、画面上にアイコンを表示するようにしました。 –

+0

hello @ user2498079 - このコードをテストしましたか?テストしてください.. – Niko

関連する問題