मैंने कोड को the answer here से कॉपी किया है और मुझे अभी भी एक रनटाइम अपवाद मिल रहा है: सेट पैरामीटर मेरे नेक्सस पर त्रुटि विफल रही है। मेरी मेनिफेस्ट फ़ाइल में कैमरा और wake_lock अनुमतियां हैं। यह एमुलेटर पर काम करता है, और droid पर मुझे त्रुटि नहीं मिलती है लेकिन इसमें घूर्णन समस्या होती है।नेक्सस पर कैमरा.सेट पैरामीटर() पर रनटाइम अपवाद
उत्तर
आप शायद एक अवैध पूर्वावलोकन आकार की आवश्यकता है। आप adb logcat
के परिणामों की जांच तो आप शायद कुछ इस तरह दिखाई देंगे:
E/QualcommCameraHardware(22732): Invalid preview size requested: 480x724
समाधान अपनी इच्छानुसार एक के सबसे करीब उपलब्ध पूर्वावलोकन आकार अनुरोध करने के लिए है, Camera.getParameters द्वारा लौटाए गए Camera.Parameters ऑब्जेक्ट में getSupportedPreviewSizes
पर कॉल करके आप उपलब्ध पूर्वावलोकन आकारों की एक सूची प्राप्त कर सकते हैं।
मैं कर क्या रोमन कहा द्वारा इसे सुधार, कोड के साथ:
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
Camera.Size cs = sizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
camera.setParameters(parameters);
क्या इसके लायक है के लिए, मेरे मुद्दे के स्रोत जा रहा है कि मैं पहली बार है कि फ्लैश मोड सत्यापित किए बिना parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
कॉल करने के लिए कोशिश कर रहा था समाप्त हो गया parameters.getFlashMode() != null
की जांच करके समर्थित थे।
इस खराब दस्तावेज अपवाद के लिए एक से अधिक कारण हैं, इसलिए अपने सभी पैरामीटर जांचें और न कि आप supportedPreviewSize
का उपयोग कर रहे हैं।
इससे मेरी मदद मिली। :) –
साझा करने के लिए धन्यवाद अगर (! getBaseContext()। getPackageManager()। सिस्टम सिस्टम ( PackageManager.FEATURE_CAMERA_FLASH)) { // डिवाइस फ्लैश डिवाइस पर उपलब्ध नहीं है } –
उपरोक्त में से कोई भी मेरे लिए हल नहीं हुआ। हालांकि पैरामीटर सेट करने से पहले इस कोड को जोड़ना था।
// stop preview before making changes
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
//now set your parameters
opencamera जैसे कुछ खुला स्रोत कैमरा परियोजना हमेशा try-catch
का उपयोग Camera.setParameters कॉल करने के लिए:
private void setCameraParameters(Camera.Parameters parameters) {
if(MyDebug.LOG)
Log.d(TAG, "setCameraParameters");
try {
camera.setParameters(parameters);
if(MyDebug.LOG)
Log.d(TAG, "done");
} catch (RuntimeException e) {
// just in case something has gone wrong
if(MyDebug.LOG)
Log.d(TAG, "failed to set parameters");
e.printStackTrace();
count_camera_parameters_exception++;
}
}
अलावा
, हमेशा नवीनतम getParameters
मिल इससे पहले कि आप इस तरह setParameters
फोन:
void setRotation(int rotation) {
Camera.Parameters parameters = this.getParameters();
parameters.setRotation(rotation);
setCameraParameters(parameters);
}
सैम का समाधान सही है लेकिन आउटपुट छवि अभी भी कई टैबलेट उपकरणों पर थोड़ी सी ज़ूम कर दी गई है। इंटरनेट पर मुझे मिली सर्वोत्तम प्रथाओं में से एक, हमें कैमरा होस्ट में सेट करना चाहिए ताकि कैमरे को फिर से शुरू होने पर गुणों का फिर से उपयोग किया जा सके। यहाँ CameraHost में विधि कार्यान्वित किया जाता है:
@Override
public Parameters adjustPreviewParameters(Parameters parameters) {
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
Camera.Size cs = sizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
return super.adjustPreviewParameters(parameters);
}
मेरे लिए यह जब तक मैं अपने कॉल अपडेट किए गए पैरामीटर निम्नलिखित होने के लिए, एक तस्वीर और पूर्वावलोकन फ्रीज होगा लेने के बाद क्या होगा। इस त्रुटि के साथ यह सुनिश्चित करना हमेशा महत्वपूर्ण होता है कि आप यह सुनिश्चित करने के लिए कैमरे से पूछने के लिए सभी पैरामीटर जांचें कि कैमरे के लिए आप जिस कैमरे को कैमरे से खुद को सेट करने के लिए कह रहे हैं, वह हर पैरामीटर है।
if (myCamera.getParameters().getSupportedPreviewSizes() != null){
Camera.Size previewSize = getOptimalPreviewSize(myCamera.getParameters().getSupportedPreviewSizes(), width, height);;
parameters.setPreviewSize(previewSize.width, previewSize.height);
}
फ़्लैश/फोकस भी तरीके में
:
if(parameters.getSupportedFocusModes() != null && parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
if (parameters.getSupportedFlashModes() != null && parameters.getSupportedFlashModes().contains(Camera.Parameters.FLASH_MODE_AUTO)){
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
}
myCamera.setParameters(parameters);
आदि यह एक अच्छा प्रयास {} पकड़() {} में लिपटे के सभी
Camera.Parameters parameters = myCamera.getParameters();
पूर्वावलोकन आकार के साथ
बहुत अच्छा काम करता है। सौभाग्य।
private Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int width, int height)
{
// Source: http://stackoverflow.com/questions/7942378/android-camera-will-not-work-startpreview-fails
Camera.Size optimalSize = null;
final double ASPECT_TOLERANCE = 0.1;
double targetRatio = (double) height/width;
// Try to find a size match which suits the whole screen minus the menu on the left.
for (Camera.Size size : sizes){
if (size.height != width) continue;
double ratio = (double) size.width/size.height;
if (ratio <= targetRatio + ASPECT_TOLERANCE && ratio >= targetRatio - ASPECT_TOLERANCE){
optimalSize = size;
}
}
// If we cannot find the one that matches the aspect ratio, ignore the requirement.
if (optimalSize == null) {
// TODO : Backup in case we don't get a size.
}
return optimalSize;
}
- 1. 2099 पैरामीटर पर SqlCommand अधिकतम पैरामीटर अपवाद
- 2. शून्य ऑब्जेक्ट पर फ्रॉम्बाइंडिंग: रनटाइम अपवाद: java.lang.reflect.InvocationTargetException
- 3. रनटाइम पर जेवीएम पैरामीटर सेट करना
- 4. गैलेक्सी नेक्सस पर टोस्ट आकार
- 5. वर्ड वीएसटीओ डिबगिंग के बिना रनटाइम पर अपवाद निगलता है?
- 6. अनचेक अपवाद या रनटाइम अपवाद
- 7. क्या रनटाइम पर C++ सामान्य प्रकार पैरामीटर चुनना संभव है?
- 8. जावा जेनेरिक प्रकार पैरामीटर रनटाइम पर क्यों संशोधित नहीं हैं?
- 9. रनटाइम पर Tframes बनाएं:
- 10. रनटाइम पर लोकेल बदलें?
- 11. रनटाइम पर कोड अनुबंध
- 12. रनटाइम पर अभिविन्यास बदलें
- 13. रनटाइम पर हाइबरनेट कॉन्फ़िगरेशन
- 14. रनटाइम पर गुण जोड़ें
- 15. रनटाइम पर कॉल विधि
- 16. एंड्रॉइड - गैलेक्सी नेक्सस पर मेनू मेनू दिखाएं
- 17. पैरामीटर पर जावा इंस्टेंटिएट क्लास पैरामीटर
- 18. रनटाइम अपवाद: वर्ग खंड
- 19. एसक्यूएल पैरामीटर आदेश बदलने पर इकाई फ्रेमवर्क अपवाद फेंकता है?
- 20. एमवीसी में अन्य पैरामीटर मान के आधार पर रनटाइम पर प्रदर्शन नाम मान कैसे बदलें?
- 21. रनटाइम पर TDataSet लुकअप फ़ील्ड कैसे बनाएं?
- 22. रनटाइम पर log4j गुण बदलें
- 23. रनटाइम पर enum मान बदलें?
- 24. रनटाइम पर हाइबरनेट डेटाबेस पासवर्ड
- 25. रनटाइम पर सी # कक्षाएं बनाना
- 26. सी: रनटाइम पर कंपाइलर जानकारी
- 27. जावा: रनटाइम पर कक्षा बढ़ाना
- 28. रनटाइम पर नियंत्रण का आकार
- 29. रनटाइम पर लेबल स्थिति बदलें
- 30. .NET 2.0 रनटाइम पर LINQ
आप ठीक कह रहे हैं, सिवाय इसके कि यह 320x480 के लिए सेट करने के लिए कोशिश कर रहा था और 480x320 काम किया है जाएगा:
यहाँ this great tutorial से getOptimalPreview आकार है। यह मुझे मेरे अगले प्रश्न पर लाता है, SurfaceHolder.Callback.surfaceChanged() विधि इतनी कम रिज़ॉल्यूशन के साथ क्यों बुलाया गया था जो डिवाइस के पहलू अनुपात से भी मेल नहीं खाता है? –
@ एरिक बी - मुझे एहसास है कि इस टिप्पणी के जवाब में यह देर हो चुकी है, लेकिन इसकी संभावना है क्योंकि आपका ऐप संगतता मोड में है, और सिस्टम आपके ऐप में पिक्सेल का वास्तविक डिवाइस रिज़ॉल्यूशन 0.66x के रूप में व्यवहार कर रहा है। इसलिए 480x800 आपके ऐप को 320x533 के रूप में प्रस्तुत किया जाएगा, संभवतः स्टेटस बार के लिए क्षैतिज या लंबवत कुछ पिक्सेल शेविंग करेगा जब तक कि आपकी गतिविधि पूर्णस्क्रीन न हो। –
एपीआई संस्करण 5 से पहले आप क्या करते हैं? (मान लें कि मैं एंड्रॉइड 1.5 के साथ संगत होना चाहता हूं) – uvgroovy