سؤال

في تطبيقي ، أرغب في استخدام الكاميرا ، إذا كان الجهاز يحتوي على واحد. هل هناك أي أجهزة تعمل على تشغيل Android لاتفعل لديك كاميرا؟ من خلال تضمين ما يلي في بيواني:

<uses-feature android:name="android.hardware.camera" android:required="false"/>

ثم يقول بشكل أساسي "سأستخدم كاميرا إذا كانت هناك واحدة ، لكن لا تحتاج إلى تشغيل التطبيق".

كيف يمكنني التحقق مما إذا كانت الكاميرا موجودة على الجهاز ، قبل محاولة استخدام فئة الكاميرا؟

هل كانت مفيدة؟

المحلول

لم أجربها ، لكن:

private android.hardware.Camera mCameraDevice;

try {
  mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
  Log.e(TAG, "fail to connect Camera", e);
  // Throw exception
}

قد يكون ما تحتاجه.

نصائح أخرى

هذا ما أستخدمه

import android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}

جميع أنواع الأشياء الممتعة الأخرى التي يجب اختبارها متوفرة أيضًا - بوصلة متوفرة ، هل هناك كاميرا تواجه الأمامية:http://developer.android.com/reference/android/content/pm/packagemanager.html

لمعرفة عدد الكاميرات المتوفرة على جهازك ، يمكنك الاتصال:

import android.hardware.Camera;

int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
  hasCamera = true;
}

Camera.GetNumberOfCameras () ثابت ، لذلك لا يتطلب الاتصال فعليًا بالكاميرا. هذا يعمل منذ API 9.

تعديل:

مع أحدث API Camera2 ، يمكنك أيضًا الاتصال Cameramanager.getCameraidList (), ، والتي تعطي قائمة بجميع معرفات الكاميرا الصالحة ، بدلاً من العد فقط.

يجب عليك استخدام هذا للعثور على الكاميرا في جهازك

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

استخدم ال packagemanager.hassystemfeature () طريقة للتحقق من الكاميرا:

private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

مصدر: https://developer.android.com/guide/topics/media/camera.html#custom-camera

يتم إهمال camera.getNumberOfCameras (). يمكنك استخدام:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int getNumberOfCameras() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        try {
            return ((CameraManager) getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length;
        } catch (CameraAccessException e) {
            Log.e("", "", e);
        }
    }
    return Camera.getNumberOfCameras();
}

جرب هذا :

/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

من عند : http://developer.android.com/guide/topics/media/camera.html

من خلال التالي ، يمكننا التحقق من أن الجهاز يحتوي على كاميرا أم لا.

/** Check if this device has a camera */
    public static boolean checkCameraHardware(Context context) {
        if (context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) 
        {
            return true;
        }
        else if(context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FRONT))
        {
            return true;
        }
        else {
            return false;
        }
    }

إذا كنت تستخدم Android 2.3 ، فهناك بعض واجهات برمجة التطبيقات التي يمكنك التحقق من حالة الكاميرا ، مثل عدد الكاميرات (الأمامية والخلف)

جرب هذا

للكاميرا الأمامية

    Context context = this;
    PackageManager packageManager = context.getPackageManager();
    if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {

        Utils.makeAlertDialog(context, "Has Front Camera ?", "YES");

    } else {

        Utils.makeAlertDialog(context, "Has Front Camera ?", "NO");
          }

للكاميرا الظهر

    Context context = this;
    PackageManager packageManager = context.getPackageManager();
    if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

        Utils.makeAlertDialog(context, "Has back Camera ?", "YES");

    } else {

        Utils.makeAlertDialog(context, "Has back Camera ?", "NO");
          }

وفقا ل توثيق, ، يجب عليك استخدام Package Manager للتحقق مما إذا كانت الكاميرا متوفرة على الجهاز أم لا

في جافا:

final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);

في كوتلين:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

لقد وجدت في مربعات تلفزيون Android حيث يمكنك توصيل وتشغيل كاميرا USB عدة مرات. في وقت ما ، تبدأ خدمة الكاميرا في القول إنها اكتشفت كاميرا واحدة في النظام بينما لا توجد كاميرا متصلة بالنظام. يحدث هذا عند توصيل/الخروج من الكاميرا عدة مرات. لإصلاح ذلك ، وجدت هذا الحل يعمل:

//under oncreate:
//cameraManager = ((CameraManager) getSystemService(Context.CAMERA_SERVICE)); 

public int getNumberOfCameras() {
        int count_ = 0;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            try {
                count_ = cameraManager.getCameraIdList().length;

                if(count_==1)
                {
                    try {
                        cameraManager.getCameraCharacteristics(cameraManager.getCameraIdList()[0]);
                    }catch (Exception e)
                    {
                        count_ = 0;
                    }
                }

            } catch (Exception e) {
               //e.printStackTrace();
            }
        }
        else {
            count_ = Camera.getNumberOfCameras();
        }

        return count_;
    }

حل سطر واحد:

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

ضع هذه الطريقة في فئة مشروع utils.java.

حسب وثائق أندرويد:

/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

راجع المزيد حول API الكاميرا:
https://developer.android.com/guide/topics/media/camera.html#detect-camera

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top