2016-04-28 5 views
-3

Мое приложение включает/выключает вспышку на множестве устройств. Но он не работает на LG-F500S Android версии 6.0 (Samsung S7 android 6.0 работает нормально). Кто поможет мне найти причину и решение, пожалуйста?Вспышка камеры не работает

+1

Пожалуйста, убедитесь, что вы читаете это и пытаются улучшить свои вопрос: http://stackoverflow.com/help/mcve –

ответ

0

Должен найти причину.
+ targetSdkVersion + Поверхностный держатель:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 

    private SurfaceHolder mHolder; 
    private Camera mCamera; 
    public CameraPreview(Context context, Camera camera) { 
     super(context); 
     mCamera = camera; 

     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     // deprecated setting, but required on Android versions prior to 3.0 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 


    @Override 
    public void surfaceCreated(SurfaceHolder surfaceHolder) { 
     try { 
      mCamera.setPreviewDisplay(surfaceHolder); 
      mCamera.startPreview(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { 
     if (mHolder.getSurface() == null){ 
      // preview surface does not exist 
      return; 
     } 
     try { 
      mCamera.stopPreview(); 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
     try { 
      mCamera.setPreviewDisplay(mHolder); 
      mCamera.startPreview(); 

     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 

    } 
} 

+ MainActivity:

public Camera getCameraInstance(){ 
     Camera c = null; 
     try { 
      c = Camera.open(); // attempt to get a Camera instance 
     } 
     catch (Exception e){ 
      // Camera is not available (in use or does not exist) 
     } 
     return c; // returns null if camera is unavailable 
    } 
@Override 
    protected void onResume() { 
     super.onResume(); 
     cam = getCameraInstance(); 
     mPreview = new CameraPreview(this, cam); 
     FrameLayout preview = (FrameLayout) findViewById(R.id.surfaceContain); 
     preview.addView(mPreview); 


    } 
public void toggleLight(View v){ 
     if (isFlash){ 
      isFlash = false; 
      params = cam.getParameters(); 
      params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
      cam.setParameters(params); 
      cam.startPreview(); 
     }else{ 
      isFlash = true; 
      params = cam.getParameters(); 
      params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
      cam.setParameters(params); 
      cam.startPreview(); 
     } 
    } 

Посмотреть подробности здесь:
https://developer.android.com/guide/topics/media/camera.html

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