Bu android bazı sürümlerinde iyi belgelenmiş bir hatadır . yani, android deneyimi Google android yapılarda, görüntü yakalama belgelendiği gibi çalışmaz. genel olarak kullandığım bir yardımcı program sınıfında böyle bir şeydir.
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);
}
görüntü yakalamayı başlattığımda, hatayı kontrol eden bir niyet oluşturuyorum.
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);
sonra geri döndüğüm aktivitede, cihaza göre farklı şeyler yaparım.
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();
}
}
bu, yeni bir kamera uygulaması yazmak zorunda kalmanızı sağlar, ancak bu kod da harika değildir. büyük problemler
hata içeren cihazlardan hiçbir zaman tam boyutlu görüntüler elde edemezsiniz. resim içeriği sağlayıcısına eklenen 512 piksel genişliğinde resimler alırsınız. hata olmayan cihazlarda, her şey belge olarak çalışır, büyük bir normal resim elde edersiniz.
listeyi korumak zorundasınız. Yazıldığı gibi, cihazların hatayı düzelten bir android sürümü ( cyanogenmod'un derlemeleri ) ile yanıp sönmesi mümkündür . bu olursa, kodunuz kilitlenir. çözüm, tüm cihaz parmak izini kullanmaktır.