getPackageManager()。hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)返回false

时间:2015-04-14 08:15:03

标签: java android

嗨,大家好!
我创建了一个手电筒应用程序,我检查了闪存是否存在:

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

    if (!hasFlash) {
        AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();
        alert.setTitle("Error");
        alert.setMessage("Sorry, your device doesn't support flashlight!");
        alert.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        alert.show();
        return;
    }

问题出在一些有闪存传感器的旧设备上,但这种检查方法返回false。 (例如,当我在 Vertis 3510你 Serioux RM X401 上运行时,此检查方法返回false,当我对这些行进行注释时,它可以正常工作。) 还有另一种检查设备是否支持闪存的方法吗?
谢谢!

1 个答案:

答案 0 :(得分:2)

使用此代码

public boolean hasFlash() {
        if (camera == null) {
            return false;
        }

        Camera.Parameters parameters = camera.getParameters();

        if (parameters.getFlashMode() == null) {
            return false;
        }

        List<String> supportedFlashModes = parameters.getSupportedFlashModes();
        if (supportedFlashModes == null || supportedFlashModes.isEmpty() || supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) {
            return false;
        }

        return true;
    }