Đây là một lỗi được ghi chép tốt trong một số phiên bản của Android. nghĩa là, trên các bản dựng kinh nghiệm của google trên Android, chụp ảnh không hoạt động như tài liệu. những gì tôi thường sử dụng là một cái gì đó như thế này trong một lớp tiện ích.
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);
}
sau đó khi tôi khởi chạy chức năng chụp ảnh, tôi tạo ra một ý định kiểm tra lỗi.
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);
sau đó trong hoạt động mà tôi trở lại, tôi làm những việc khác nhau dựa trên thiết bị.
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();
}
}
điều này giúp bạn tiết kiệm được việc phải viết một ứng dụng máy ảnh mới, nhưng mã này cũng không tuyệt vời. những vấn đề lớn là
bạn không bao giờ có được hình ảnh kích thước đầy đủ từ các thiết bị có lỗi. bạn nhận được hình ảnh rộng 512px được chèn vào nhà cung cấp nội dung hình ảnh. trên các thiết bị không có lỗi, mọi thứ đều hoạt động như tài liệu, bạn sẽ có được một bức tranh lớn bình thường.
bạn phải duy trì danh sách như đã viết, các thiết bị có thể được flash với phiên bản Android (giả sử bản dựng của cyanogenmod ) đã sửa lỗi. Nếu điều đó xảy ra, mã của bạn sẽ bị sập. Cách khắc phục là sử dụng toàn bộ dấu vân tay của thiết bị.