2011-07-31 5 views
9

मैंने अपने कैमरे को फ्लैश चालू और बंद स्विच करने से ऐप बनाने की कोशिश की। कोड मैं एटीएम इस तरह दिखता है:java.lang.RuntimeException: कैमरा सेवा से कनेक्ट करने में विफल

Camera flash; 
Camera.Parameters params; 

flash = Camera.open(); 
params = flash.getParameters(); 

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);   
flash.setParameters(params); 

और प्रकट एक्सएमएल में:

<permission android:name="android.permission.FLASHLIGHT" 

android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" 
      android:protectionLevel="normal" /> 

<permission android:name="android.permission.CAMERA"> </permission> 

हर मैं कोड चलाने के लिए, पर ऐप्लिकेशन क्रैश "फ्लैश = Camera.open();" इस त्रुटि के साथ:

java.lang.RuntimeException: Fail to Connect to camera service

क्या मैं गलत कर रहा हूँ?

+5

मैनिफेस्ट भाग के साथ बनाने के मुद्दों के बावजूद मैं कहूंगा कि आपको फ्लैशलाइट और कैमरे के लिए <अनुमति /> वाले लोगों के बजाय <उपयोग-अनुमति /> टैग का उपयोग करना होगा। यह भी स्पष्ट करने के लिए, कृपया सही ढंग से फॉर्मेट किए गए मेनिफेस्ट भाग को पोस्ट करें (और शायद पूरे स्टैकट्रैक, यदि यह एक अनुमति समस्या है, तो लॉगकैट में अपवाद से पहले एक संकेत होना चाहिए)। –

+0

धन्यवाद, इससे मुझे बहुत मदद मिली! – gethan

उत्तर

34

डिवाइस कैमरा पहुंचने के लिए, अगर आप इस तरह अपने Android प्रकट में कैमरा अनुमति घोषित करना चाहिए,

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
+9

यह पूरी तरह से सच नहीं है, आपको कैमरे तक पहुंचने के लिए उपयोग-फीचर टैग की आवश्यकता नहीं है: "घोषित <उपयोग-सुविधा> तत्व केवल सूचनात्मक हैं, जिसका अर्थ है कि एंड्रॉइड सिस्टम स्वयं डिवाइस पर मिलान सुविधा सुविधा के लिए जांच नहीं करता है एप्लिकेशन इंस्टॉल करना। हालांकि, अन्य सेवाएं (जैसे कि Google Play) या एप्लिकेशन आपके एप्लिकेशन के <उपयोग-सुविधा> घोषणाओं को आपके आवेदन के साथ हैंडलिंग या इंटरैक्ट करने के हिस्से के रूप में देख सकते हैं। " http://developer.android.com/guide/ विषयों/प्रकट/का उपयोग करता है-सुविधा element.html – stoefln

1

आमतौर पर है कि समस्या लापता कैमरा अनुमति का अनुरोध की वजह से है, के रूप में पहले से ही अन्य उपयोगकर्ताओं द्वारा कहा।

लेकिन, बस यहाँ एक और कारण रजिस्टर करने के लिए, यदि आप एक cameraID जो मौजूद नहीं है का उपयोग करते हुए कैमरे को खोलने का प्रयास, आपको लगता है कि एक ही त्रुटि

java.lang.RuntimeException: Fail to Connect to camera service

7

आप onDestroy में रिलीज फोन करना भूल गए हैं प्राप्त होगा

उदाहरण के लिए:

@Override 
protected void onDestroy() { 
    if (mCamera != null) { 
     mCamera.release(); 
    } 
    super.onDestroy(); 
} 
1

आप प्रोग्राम के रूप में पहले एंड्रॉयड 6.x पर नया अनुरोध अनुमति जोड़नी होगी।

private static final int MY_PERMISSIONS_REQUEST_CAMERA = 555; 

if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
     } else { 
      IntentIntegrator.forSupportFragment(this).initiateScan(); 
     } 

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_CAMERA: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       IntentIntegrator.forSupportFragment(this).initiateScan(); 
      } else { 
       FragmentHelper.popFragment(getActivity(), null, null); 
      } 
     } 
    } 
}