2013-07-07 126 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();在onCreate()上的第一個if()語句之前? – 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

@Niko不,我只是做了它在屏幕上看到我的圖標 –

+0

hello @ user2498079 - 你測試了這個代碼...請測試它.. – Niko