2015-11-14 118 views
1

嗨,我跟着我跟着一个教程here并写出了代码,我测试了它,但手电筒没有打开,我不知道什么是错误的。 我没有声音的部分,因为我宁愿没有任何声音。手电筒不会打开

package net.netne.benpaterson35; 
import android.app.*; 
import android.os.*; 
import android.hardware.*; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity 
{ 

Button mainButton1; 

private Camera camera; 
private boolean isFlashOn; 
private boolean hasFlash; 
Parameters params; 

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

    mainButton1 = (Button) findViewById(R.id.mainButton1); 

    hasFlash = getApplicationContext().getPackageManager(). 
     hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 

    if (!hasFlash) { 
     AlertDialog alert = new AlertDialog.Builder(MainActivity.this) 
      .create(); 
     alert.setTitle("Sorry"); 
     alert.setMessage("This device doesn't have flash a flash light"); 
     alert.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which){ 
        finish(); 
       } 
      }); 
      alert.show(); 
      return; 
    } 

    getCamera(); 
    mainButton1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v){ 
      if (isFlashOn){ 
       turnOffFlash();} 
     else { 
      turnOnFlash(); 
     } 

    }; 

}); 

} 

private void getCamera(){ 
    if (camera == null){ 
    try { 
     camera = Camera.open(); 
     params = camera.getParameters(); 
    } catch (RuntimeException e) { 
     Log.e("Failed to open camera", e.getMessage()); 
    } 

    } 
} 
private void turnOnFlash() { 
    if (!isFlashOn){ 
    if (camera == null || params == null){ 
     return; 
    } 
    params = camera.getParameters(); 
    params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
    camera.setParameters(params); 
    camera.startPreview(); 
    isFlashOn = true; 
} 
} 

private void turnOffFlash() { 
    if (isFlashOn){ 
     if (camera == null || params == null) { 
     return; 
     } 
    params = camera.getParameters(); 
    params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.stopPreview(); 
     isFlashOn = false; 
     } 
    } 

@Override 
protected void onDestroy() 
    { 
     super.onDestroy(); 
    } 

@Override 
    protected void onPause() 
{ 
     super.onPause(); 

    turnOffFlash(); 
    } 

@Override 
     protected void onRestart() 
{ 
      super.onRestart(); 
} 
    @Override 
     protected void onResume() 
{ 
       super.onResume(); 
       if(hasFlash) 
       turnOnFlash(); 
} 

@Override 
protected void onStart() 
{ 
     super.onStart(); 
     getCamera(); 
    } 

@Override 
protected void onStop() 
    { 
     super.onStop(); 

    if (camera != null) { 
    camera.release(); 
    camera = null; 
    } 
} 
} 

感谢您的阅读:)

回答

0

,如果你在新的设备工作,你就跟着我做它通过下面这段代码棒棒糖设备上工作给予新设备不会工作的代码试试看

mCam = Camera.open(); 
Camera.Parameters p = mCam.getParameters(); 
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
mCam.setParameters(p); 
mPreviewTexture = new SurfaceTexture(0); 
try { 
    mCam.setPreviewTexture(mPreviewTexture); 
} catch (IOException ex) { 
    // Ignore 
} 
mCam.startPreview(); 
+0

嗨,谢谢你的回复,我应该在哪里放置代码? :) – Ben

+0

打开手电筒 –

+0

我应该在哪里放置变量? – Ben

0

你加

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

你AndroidManifest?

高度怀疑您没有添加权限。

+0

我加了:) – Ben

+0

然后我想你应该使用params.getSupportedFlashModes()来检查设备是否支持FLASH_MODE_TORCH,如果没有,请使用FLASH_MODE_ON代替。 –

+0

我刚刚尝试过FLASH_MODE_ON,但仍然没有运气,我在运行5.0.1的设备上运行此操作 – Ben