手电筒在某些设备上无法使用

时间:2015-04-25 09:42:45

标签: android camera led flashlight

我目前制作了一个简单的手电筒应用程序,但它不适用于某些带有相机LED的设备,但在其他设备上它工作正常。谁能告诉我我做错了什么?

这是我的主要活动:

public class MainActivity extends Activity {

    private Camera camera;
    private Camera.Parameters parameters;
    private ImageButton flashLightButton;
    boolean isFlashLightOn = false;


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

         AdView mAdView = (AdView) findViewById(R.id.adView);
            AdRequest adRequest = new AdRequest.Builder().build();
            mAdView.loadAd(adRequest);


        flashLightButton = (ImageButton)findViewById(R.id.flashlight_button);
        flashLightButton.setOnClickListener(new FlashOnOffListener());

        if (isFlashSupported()) {
            camera = Camera.open();
            parameters = camera.getParameters();
        } else {
            showNoFlashAlert();
        }
    }



    private class FlashOnOffListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            if(isFlashLightOn){
                flashLightButton.setImageResource(R.drawable.flashlight_off);
                parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(parameters);
                camera.stopPreview();
                isFlashLightOn = false;
            }else{
                flashLightButton.setImageResource(R.drawable.flashlight_on);
                parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                camera.startPreview();
                isFlashLightOn = true;
            }

        }

    }

    private void showNoFlashAlert() {
        new AlertDialog.Builder(this)
                .setMessage("Your device hardware does not support flashlight!")
                .setIcon(android.R.drawable.ic_dialog_alert).setTitle("Error")
                .setPositiveButton("Ok", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        finish();
                    }
                }).show();
    }

    private boolean isFlashSupported() {
        PackageManager pm = getPackageManager();
        return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    }

    @Override
    protected void onDestroy() {
        if(camera != null){
            camera.stopPreview();
            camera.release();
            camera = null;
        }
        super.onDestroy();
    }
}

1 个答案:

答案 0 :(得分:1)

你遇到的问题与某些制造商如何将他们的相机LED置于手电筒模式有不同的方式以及一些旧设备如何运行日期版本的android用于启用LED有关。三星和HTC通常都有问题,因此最简单的解决方法是使用switch-case语句为不同类型的设备打开/关闭手电筒。之前已经多次询问过这个问题,所以一个好的方法就是在这里搜索为不同制造商和Android版本打开手电筒的不同方法。然后编写一些获取设备属性的逻辑,使用switch-case或if-else测试它们,并为每个供应商做你应该做的事情。至少,这是确保完全兼容的最佳方式。