【问题标题】:Android flashlight code not workingAndroid手电筒代码不起作用
【发布时间】:2016-01-01 14:52:53
【问题描述】:

我创建了一个简单的项目来使用手电筒功能。从许多不同的地方(基本上都以相同的方式),我组装了以下代码,但手电筒不会打开(没有引发异常) - 但它适用于相机时我拍照:

Example code

Example code 2

Example Code 3

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

        try {


            // check flashlight support
            hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

            if (!hasFlash) {
                // device doesn't support flash
                // Show alert message and close the application
                AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();
                alert.setTitle("Error");
                alert.setMessage("Sorry, your device doesn't support flash light!");
                alert.setButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        finish();
                    }
                });
                alert.show();
                return;
            }

            text_off = (TextView) findViewById(R.id.text_off);
            text_off.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                    return;
                }
            });


            getCamera();
            turnOnFlash();

        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "onResume Error: "+e.getMessage());
        }

    }

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

        turnOffFlash();

    }






    private void getCamera() {
        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();
            } catch (RuntimeException e) {
                Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
            }
        }   
    }

    @SuppressWarnings("deprecation")
    private void turnOnFlash() {

        try {
            Log.d(this.getClass().getSimpleName(), "turnOnFlash CHECKPOINT ");


            if (camera == null || params == null) {
                return;
            }


            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_ON); 
            // ALSO TRIED: params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;

            Log.d(this.getClass().getSimpleName(), "turnOnFlash CHECKPOINT EXIT");

        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
        }

    }


    @SuppressWarnings("deprecation")
    private void turnOffFlash() {

        try {

            Log.d(this.getClass().getSimpleName(), "turnOffFlash CHECKPOINT ");

            if (camera == null || params == null) {
                return;
            }

            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            camera.release();
            isFlashOn = false;

        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
        }

    }

在清单中:

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

为什么这段代码不能打开/关闭手电筒?

硬件:Nexus 5

操作系统:Android Marshmallow

【问题讨论】:

    标签: android android-camera flashlight


    【解决方案1】:

    我认为您缺少额外的一行代码,这是某些设备所需要的。到目前为止,我遇到的所有设备都需要这 3 行:

    // will work on some devices
    mCamera.setParameters(parameters);
    // Needed for some devices.
    mCamera.setPreviewTexture(new SurfaceTexture(0));
    // Needed for some more devices.
    mCamera.startPreview();
    

    如果您添加一些虚拟SurfaceTexture 它应该可以工作。您还可以查看完整的代码示例here

    相机 api 因手机而异,而且这些手机的详细信息记录不充分。

    【讨论】:

    • 那一行是/是缺少的部分 - 谢谢!
    • 我自己对这 3 行有很多问题 ;) @AndroidAddict
    • 我尝试过使用相同的东西,但是一旦用户让我们关闭按钮,我就会关闭手电筒,这不再起作用了。添加表面纹理后手电筒一直亮着。
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多