ini adalah bug yang terdokumentasi dengan baik di beberapa versi android. yaitu, berdasarkan pengalaman Google membangun android, pengambilan gambar tidak berfungsi seperti yang didokumentasikan. apa yang saya umumnya gunakan adalah sesuatu seperti ini di kelas utilitas.
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);
}
lalu ketika saya meluncurkan pengambilan gambar, saya membuat maksud yang memeriksa bug.
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);
lalu dalam aktivitas yang saya kembali ke, saya melakukan hal-hal yang berbeda berdasarkan perangkat.
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();
}
}
ini menghemat Anda harus menulis aplikasi kamera baru, tetapi kode ini juga tidak bagus. masalah besar adalah
Anda tidak pernah mendapatkan gambar berukuran penuh dari perangkat dengan bug. Anda mendapatkan gambar dengan lebar 512px yang dimasukkan ke penyedia konten gambar. pada perangkat tanpa bug, semuanya berfungsi sebagai dokumen, Anda mendapatkan gambar normal yang besar.
Anda harus menjaga daftarnya. seperti yang tertulis, adalah mungkin bagi perangkat untuk di-flash dengan versi android (katakanlah cyanogenmod's build ) yang memiliki bug diperbaiki. jika itu terjadi, kode Anda akan macet. Cara mengatasinya adalah dengan menggunakan seluruh sidik jari perangkat.