2012-06-27 9 views

उत्तर

4

क्या एंड्रॉइड कैमरा उपयोग में है या नहीं, यह जानने का कोई तरीका है?

हाँ, Camera.open() आप एक अपवाद दे देंगे अगर कैमरे का उपयोग में है।

docs से

,

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 
+0

धन्यवाद। अगर यह पाया जाता है कि कैमरा पहले से उपयोग में है तो मैं कैमरे का उपयोग कैसे कर सकता हूं? क्या कैमरे को कैच ब्लॉक में रिलीज़ करना सही है और फिर इसे खोलने का प्रयास करें? – user1414146

+0

@ user1414146 आपको तब तक इंतजार करना होगा जब तक कि अन्य एप्लिकेशन कैमरे के साथ नहीं किया जाता है :) और फिर पुनः प्रयास करें। – COD3BOY

2

मैं नहीं जानता कि क्यों यह सवाल कई बार कहा जा रहा है, एक बार आप अपने खुद के गतिविधि या एप्लिकेशन को कैमरे में ही शुरू हो जाएगा कैमरा के लिए चल रहे गतिविधि के रूप में जारी किया जाएगा विराम स्थिति में जाओ।

+5

लेकिन यदि वह पृष्ठभूमि सेवा चला रहा है, तो कैमरा एप्लिकेशन उसके कोड को चलाने के दौरान आगे हो सकता है। – Eric

+0

सभी ऐप्स या कोड इस तरह से व्यवहार नहीं करते हैं, हालांकि यह अग्रभूमि ऐप्स के लिए अनुशंसित है। – Sam

1

मुझे पता है कि यह वास्तव में एक पुराना सवाल है, लेकिन मैंने एक ही चीज़ के बारे में सोचने वाली Google खोज के साथ उस पर ठोकर खाई। एंड्रॉइड के नए संस्करणों के साथ, आप यह निर्धारित करने के लिए कि क्या कैमरा उपयोग में है या नहीं, CameraManager.AvailabilityCallback पंजीकृत कर सकते हैं।

import android.hardware.camera2.CameraManager; 

    // within constructor 
    // Figure out if Camera is Available or Not 
    CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); 
    cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler); 


    CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() { 
    public void onCameraAvailable(String cameraId) { 

     cameraInUse=false; 
     Log.d(TAG, "notified that camera is not in use."); 

    } 

    public void onCameraUnavailable(String cameraId) { 

     cameraInUse=true; 
     Log.d(TAG, "notified that camera is in use."); 

    } 
}; 
+0

नोट, एंड्रॉइड 5.1 में एक बग है कि यह टूटा जा सकता है - https://code.google.com/p/android/issues/detail?id=164769। उन संस्करणों के लिए, आपको पंजीकरण करने से पहले सेवा को ठीक तरह से प्रारंभ करने के लिए ''' cam_manager.getCameraIdList() '' '' '' '' '' '' '' '' '_ _~ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – PressingOnAlways

2

आप इस method.if यह रिटर्न सच तो कैमरा कुछ एप्लिकेशन द्वारा भी उपयोग में है की कोशिश कर सकते हैं: यहाँ कुछ उदाहरण कोड है।

public boolean isCameraUsebyApp() { 
    Camera camera = null; 
    try { 
     camera = Camera.open(); 
    } catch (RuntimeException e) { 
     return true; 
    } finally { 
     if (camera != null) camera.release(); 
    } 
    return false; 
} 

फिर कैमरा जरूरतों को पुनः आरंभ के रूप में उपकरण पुन: प्रारंभ करने के लिए उपयोगकर्ता के लिए टोस्ट दिखा।