1

QR コード リーダーを開く前に、デバイスにカメラがあるかどうかを確認したいと考えています。

次のコードがあります。

 public boolean checkDeviceCompatibility() {

PackageManager pm = context.getPackageManager();

if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    return true;
    } else {
    // use front camera
    Toast.makeText(
        context,
        "This device does not have a back camera so it has automatically reverted to the front camera",
        Toast.LENGTH_SHORT).show();
    return true;
    }
} else {
    util.displayErrorDialog(
        context,
        "This device does not have any cameras and therefore cannot make use of the QR Code feature.");
    return false;
}
}

しかし、2 台のカメラを搭載した Galaxy S3 でこのコードをデバッグ モードで実行すると、. 最初の if ステートメントは false を返します。

これはなぜですか?

4

2 に答える 2

2

明確にするために。

FEATURE_CAMERA_ANYAndroid 4.2 (API-17): Android - developersに追加されました。

コード:

public static boolean hasCamera(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}

デバイスがバージョン 4.2 未満の場合、このコードを使用すると false が返されることに注意してください。

次に、機能を使用するときにエミュレーターにバグがあることを知っておく必要がありますFEATURE_CAMERA_ANY(Android 4.2以降)。参照:エミュレーターがカメラ サポート フラグを尊重しない

そのため、非推奨であっても古い方法を使用しています。

public static boolean hasCamera() {
    return android.hardware.Camera.getNumberOfCameras() > 0;
}
于 2016-11-18T11:59:46.027 に答える