এটি অ্যান্ড্রয়েডের কয়েকটি সংস্করণে একটি ভাল ডকুমেন্টেড বাগ । এটি হ'ল গুগল এন্ড্রয়েডের অভিজ্ঞতা নিয়ে ইমেজ ক্যাপচার ডকুমেন্ট হিসাবে কাজ করে না। আমি সাধারণত যা ব্যবহার করেছি এটি একটি ইউটিলিটি ক্লাসে এরকমই।
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 প্রশস্ত চিত্রগুলি পান যা চিত্র সামগ্রী সরবরাহকারীর মধ্যে .োকানো হয়। বাগ ছাড়াই থাকা ডিভাইসগুলিতে, সমস্ত কিছু ডকুমেন্ট হিসাবে কাজ করে, আপনি একটি বড় সাধারণ ছবি পাবেন।
আপনি তালিকা বজায় রাখতে হবে। লিখিত হিসাবে, ডিভাইসগুলির জন্য অ্যান্ড্রয়েডের একটি সংস্করণ ( সায়ানোজেনমডস বিল্ডগুলি বলুন ) দিয়ে বাগ ফিক্সড দিয়ে ফ্ল্যাশ করা সম্ভব । যদি এটি হয়, আপনার কোড ক্রাশ হবে। ফিক্সটি হ'ল পুরো ডিভাইস ফিঙ্গারপ্রিন্ট ব্যবহার করা।