जांचें कि क्या डिवाइस में कैमरा है?


80

मेरे ऐप में, मैं कैमरा का उपयोग करना चाहता हूं, अगर डिवाइस में एक है। क्या कोई ऐसी डिवाइस चल रही हैं, जिसमें कैमरा हो? मेरे प्रकटन में निम्नलिखित को शामिल करके:

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

तो यह मूल रूप से कह रहा है "अगर मैं मौजूद हूं तो मैं एक कैमरे का उपयोग करूंगा, लेकिन ऐप को चलाने के लिए किसी की आवश्यकता नहीं है"।

कैमरा वर्ग का उपयोग करने का प्रयास करने से पहले, मैं कैसे जांच सकता हूं कि कैमरा डिवाइस पर मौजूद है या नहीं?


1
मुझे विश्वास है (लेकिन मुझे 100% यकीन नहीं है) कि Android संगतता परिभाषा दस्तावेज़ के सभी पुराने और वर्तमान संस्करण कुछ न्यूनतम रिज़ॉल्यूशन वाले कैमरा निर्दिष्ट करते हैं। CDD का अनुपालन Android बाज़ार और स्वामित्व Google अनुप्रयोगों के लिए लाइसेंस प्राप्त करने के लिए एक शर्त है। वहाँ Android उपकरणों वहाँ है कि हालांकि, (जैसे नुक्कड़ रंग) नहीं हैं।
21

2
आज तक, दस्तावेज़ का वर्तमान संस्करण (4.2) निर्दिष्ट करता है "डिवाइस कार्यान्वयन SHOULD में एक रियर-फेसिंग कैमरा शामिल है, और MAY में एक फ्रंट-फेसिंग कैमरा शामिल है।" ध्यान दें कि यह 'MUST' कीवर्ड का उपयोग नहीं करता है।
मैथ्यू ब्लैकफोर्ड

बस इसे जोड़ने के लिए ऐसे उपकरण भी हैं जिनमें केवल फ्रंट-फेसिंग कैमरा है।
द बर्गा

क्या इसे प्रकट में जोड़ने का कोई मतलब है, अगर यह कहता है कि ऐप को कैमरे के साथ और बिना काम करना चाहिए? क्या यह प्ले स्टोर पर ऐप को प्रभावित करता है, शायद?
Android डेवलपर

जवाबों:


-44

मैंने इसे आज़माया नहीं है, लेकिन:

private android.hardware.Camera mCameraDevice;

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

हो सकता है कि आपको क्या चाहिए।


और कैमरा वस्तु जारी करने के लिए मत भूलना!
opedog

11
किसी उपकरण में कैमरा है या नहीं, यह देखने के सही तरीके के लिए dpjanes उत्तर नीचे देखें।
ज़ैक मैरपेज़

22
बुरा दृष्टिकोण। महँगा कॉल। यदि एक ही कैमरा अन्य अनुप्रयोगों द्वारा खोला जाता है, तो यह RuntimeException को फेंक देगा। उद्देश्य के अनुरूप नहीं है।
पोइंट्टर नल

5
यह उत्तर इतना प्रसिद्ध हो गया है! :) meta.stackoverflow.com/a/316273/651647
Farshid Zaker

एंड्रॉइड 6.0 (एपीआई स्तर 23) + पर यह कार्यान्वयन एक SecurityException को फेंक देगा जब तक कि आपने विशेष रूप से रनटाइम में "android.permission.CAMERA" अनुमति का अनुरोध नहीं किया था।
मैट

224

यह मैं उपयोग कर रहा हूं

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


4
इतना जल्दी सवाल। यह गूंगा हो सकता है लेकिन मैं android / java में नया हूँ जहाँ आपको संदर्भ मिलते हैं ???? धन्यवाद
grobartn

3
@ ग्रोबार्टन:public class YourActivity extends Activity { Context contextActivity; PackageManager pm; @Override public void onCreate(Bundle savedInstanceState) { ... contextActivity = this; pm = contextActivity.getPackageManager(); ...
क्लोफी

14
API स्तर 9 से, आप FEATURE_CAMERA_FRONT के अलावा FEATURE_CAMERA की जांच करना चाहते हैं। उदाहरण के लिए, Nexus 7 (जिसमें केवल एक ललाट कैमरा है) FEATURE_CAMERA के लिए गलत है।
जोर्ज केवैलोस

6
जलाने की आग HD 7 "(Android 4.0.3) के लिए, मैंने पाया कि यह FEATURE_CAMERA की रिपोर्ट करता है, भले ही यह केवल एक फ्रंट कैमरा हो! भयानक ... एक वर्कअराउंड के रूप में मैं भी परीक्षण करता हूं (FEATURE_CAMERA_FRONT और कैमरा .getNumberOfCameras) (== 1) ) तो मुझे पता है कि कोई रियर कैमरा नहीं है।
CSmith

6
एपीआई स्तर 17 के बाद, आप PackageManager.FEATURE_CAMERA_ANY
XY

42

आपके डिवाइस पर कितने कैमरे उपलब्ध हैं, यह जानने के लिए, आप कॉल कर सकते हैं:

import android.hardware.Camera;

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

Camera.getNumberOfCameras () स्थिर है, इसलिए इसे वास्तव में कैमरे से कनेक्ट करने की आवश्यकता नहीं है। यह एपीआई 9 के बाद से काम करता है।

संपादित करें:

नए Camera2 API के साथ, आप CameraManager.getCameraIdList () भी कॉल कर सकते हैं , जो कि केवल काउंट के बजाय सभी मान्य कैमरा आईडी की सूची देता है।


2
यह मेरे लिए काम किया और FEATURE_CAMERA ने API 19 में नहीं
sobelito

एक पंक्ति संस्करण: बूलियन hasCam = android.hardware.Camera.getNumberOfCameras ()> 0;
जे.जैकबॉब्स-वीपी

यह उत्तर बेहतर है। hasSystemFeature (PackageManager.FEATURE_CAMERA) किट-कैट (नेक्सस 7) पर झूठी वापसी करता है
किरिल कर्माज़िन

1
यह नेक्सस 7 (2013) के लिए गलत है, क्योंकि FEATURE_CAMERA केवल बैक-फेसिंग कैमरों (बैकवर्ड संगतता के कारण) के बारे में है; FEATURE_CAMERA_ANY वह विशेषता है जो डिवाइस पर किसी भी प्रकार का कम से कम एक कैमरा होने पर सच है।
एडी तलवला

android.hardware.Cameraपदावनत क्यों किया जाता है ? इस फ़ंक्शन के बजाय क्या उपयोग किया जाना चाहिए? मुझे पता है कि हमारे पास अब है android.hardware.camera2, लेकिन हम getNumberOfCamerasवहां का विकल्प कहां खोज सकते हैं ?
Android डेवलपर

12

आपको अपने डिवाइस में कैमरा खोजने के लिए इसका उपयोग करना चाहिए

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

1
मुझे लगता है कि यह सबसे उपयोगी है। FEATURE_CAMERA_ANY एक अच्छा विकल्प है। यहां उन लोगों के लिए कोड का एक छोटा संस्करण है जो इसे पसंद करते हैं। public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) }
miva2

6

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();
}

6

कैमरा जांचने के लिए 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



3

निम्नलिखित तरीके से हम जांच सकते हैं कि डिवाइस में कैमरा है या नहीं।

/** 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;
        }
    }

1

यदि आप एंड्रॉइड 2.3 का उपयोग कर रहे हैं, तो कुछ एपीआई हैं जो आप अपने कैमरे की स्थिति की जांच कर सकते हैं, जैसे कि कैमरों की संख्या (आगे और पीछे)


1

इसे इस्तेमाल करे

फ्रंट कैमरा के लिए

    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");
          }

1

Android प्रलेखन के अनुसार:

/** 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


0

प्रलेखन के अनुसार , आपको यह देखने के लिए पैकेज प्रबंधक का उपयोग करना होगा कि कैमरा डिवाइस पर उपलब्ध है या नहीं

जावा में:

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

कोटलिन में:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

0

मुझे एंड्रॉइड टीवी बॉक्स मिले जहां आप कई बार यूएसबी कैमरा प्लग और प्ले कर सकते हैं। कुछ समय में, कैमरा सेवा यह कहना शुरू कर देती है कि उसने सिस्टम में एक कैमरे का पता लगाया, जबकि कोई कैमरा सिस्टम से जुड़ा नहीं है। ऐसा तब होता है जब आप कैमरे को कई बार प्लग इन / आउट करते हैं। इसे ठीक करने के लिए, मुझे यह समाधान काम कर रहा है:

//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_;
    }

0

एक पंक्ति समाधान:

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

इस विधि को अपने Utils.java प्रोजेक्ट क्लास में रखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.