यह एंड्रॉइड के कुछ संस्करणों में एक अच्छी तरह से प्रलेखित बग है। यही कारण है कि, Android के Google अनुभव बिल्ड पर, छवि कैप्चर दस्तावेज़ के रूप में काम नहीं करता है। क्या मैं आमतौर पर इस्तेमाल किया है एक उपयोगिता वर्ग में इस तरह से कुछ है।
public boolean hasImageCaptureBug() {
// list of known devices that have the bug
ArrayList<String> devices = new ArrayList<String>();
devices.add("android-devphone1/dream_devphone/dream");
devices.add("generic/sdk/generic");
devices.add("vodafone/vfpioneer/sapphire");
devices.add("tmobile/kila/dream");
devices.add("verizon/voles/sholes");
devices.add("google_ion/google_ion/sapphire");
return devices.contains(android.os.Build.BRAND + "/" + android.os.Build.PRODUCT + "/"
+ android.os.Build.DEVICE);
}
तब जब मैं छवि कैप्चर करता हूं, तो मैं एक इरादा बनाता हूं जो बग की जांच करता है।
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (hasImageCaptureBug()) {
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/tmp")));
} else {
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
startActivityForResult(i, mRequestCode);
फिर मैं जिस गतिविधि में लौटता हूं, मैं डिवाइस के आधार पर अलग-अलग चीजें करता हूं।
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case GlobalConstants.IMAGE_CAPTURE:
Uri u;
if (hasImageCaptureBug()) {
File fi = new File("/sdcard/tmp");
try {
u = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
if (!fi.delete()) {
Log.i("logMarker", "Failed to delete " + fi);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
u = intent.getData();
}
}
यह आपको एक नया कैमरा ऐप लिखने के लिए बचाता है, लेकिन यह कोड या तो महान नहीं है। बड़ी समस्याएं हैं
बग के साथ उपकरणों से आपको कभी भी पूर्ण आकार के चित्र नहीं मिलते हैं। आपको चित्र प्राप्त होते हैं जो 512px चौड़े होते हैं जो छवि सामग्री प्रदाता में डाले जाते हैं। बग के बिना उपकरणों पर, सब कुछ दस्तावेज़ के रूप में काम करता है, आपको एक बड़ी सामान्य तस्वीर मिलती है।
आपको सूची को बनाए रखना होगा। जैसा कि लिखा गया है, यह संभव है कि उपकरणों को एंड्रॉइड के एक संस्करण के साथ फ्लैश किया जाए (जैसे कि सियानोजेनमॉड का निर्माण ) जिसमें बग को ठीक किया गया है। यदि ऐसा होता है, तो आपका कोड क्रैश हो जाएगा। फिक्स पूरे डिवाइस फिंगरप्रिंट का उपयोग करना है।