【问题标题】:flash light wont turn on / camera error闪光灯无法打开/相机错误
【发布时间】:2018-01-10 07:08:28
【问题描述】:

嗨,我正在查看手电筒应用程序源代码,我修改了一点,因为当我最小化应用程序时,手电筒会关闭,所以我只使用 onDestroy() 方法来关闭应用程序状态,但是当我有时关闭和打开应用程序时甚至不工作它显示闪光灯但不打开闪光灯 这就是我所做的

public class MainActivity extends AppCompatActivity {

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




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

   final ImageButton imgbutton = (ImageButton)findViewById(R.id.imageButton);





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



    getCamera();

    //button.setOnClickListener(new View.OnClickListener() {
         imgbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (isFlashOn) {
                turnOffFlash();

                Toast.makeText(MainActivity.this, "Flash OFF!", Toast.LENGTH_SHORT).show();
                imgbutton.setImageResource(R.drawable.light_off);

            } else {
                turnOnFlash();

                Toast.makeText(MainActivity.this, "Flash ON!", Toast.LENGTH_SHORT).show();
                imgbutton.setImageResource(R.drawable.light_on);
            }

        }
    });
}

private void getCamera() {

    if (camera == null) {
        try {
            camera = Camera.open();
            params = camera.getParameters();
        }catch (Exception e) {

        }
    }

}

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;
    }
}

protected void onDestroy(){

    if(camera!=null){

        camera.stopPreview();
        camera.setPreviewCallback(null);

        camera.release();
        camera = null;
    }


} }

【问题讨论】:

    标签: android flashlight


    【解决方案1】:

    你忘了覆盖:

    1. onStop()

      @Override
        protected void onStop() {
            super.onStop();
            if (camera != null) {
                camera.release();
                camera = null;
            }
        }
      
    2. onResume()

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

    要获取hasFlash,我建议您将其放入onCreate() 以了解设备是否有闪存

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

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

    顺便说一句,你的代码重复了……

    【讨论】:

    • 应用程序将在我最小化应用程序时关闭灯,我需要将其打开,即使它最小化,当我关闭应用程序(它调用 destroy() 方法)然后系统说“不幸的是手电筒应用程序已停止“
    • 然后在 onPause 中删除 turnOffFlash() 方法...将 logcat 错误放在您的问题中以查看发生了什么崩溃
    • 我从 onPause() 中删除了 turnOffFlash() 但没有奏效,然后我删除了 onStop() 中的方法然后它起作用了..现在prblm是应用程序已停止 msg出现在应用程序完全关闭
    • 感谢我发现了我的问题.. 我没有在 onDestory() 方法中调用 super.onDestory() 导致 prbolem 现在没有显示任何错误
    • @JasbinKarki 是的,当然你必须调用 super.onDestroy()
    【解决方案2】:

    使用onPause()onResume() 方法并在此处编写代码。

    @Override
        protected void onPause() {
            super.onPause();
    
           //Your code
        }
    
    @Override
        protected void onResume() {
            super.onResume();
    
    //Your code
        }
    

    【讨论】:

    • 感谢您的反馈..当我关闭应用程序时,我的应用程序崩溃了有没有办法解决我在销毁时使用 turnOffFlash() 无法解决的问题
    • 分享您的错误,如果有帮助,请将此答案标记为已批准。
    • 系统说应用程序不幸关闭了这里的日志pastebin.com/aEm5deSi
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 2011-06-11
    • 2013-02-27
    • 2011-10-02
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多