2015-11-14 6 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

Смежные вопросы