我在不同设备上打开相机意图时遇到问题。
我可以在没有问题的情况下启动我在小米设备上编写的应用程序,但在其他设备上启动应用程序时,存在问题。
这是我的代码。抱歉,没有要显示的日志文件。
private void startCamera() {
// 使用android內建api
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Case = 10; // camera
// 檔案名稱使用時間來記錄
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
date = sDateFormat.format(new java.util.Date());
// 強制轉型.jpg
date = date + ".jpg";
// 檔案存放地方 還有檔案名稱
tmpFile = new File(Environment.getExternalStorageDirectory()
+ "/DCIM/100ANDRO", date);
imageUri = Uri.fromFile(tmpFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
.parse("file://" + tmpFile)));
startActivityForResult(intent, 2);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
/**
* Camera
*/
if (resultCode == RESULT_OK && requestCode == 2) {
// 利用BitmapFactory去取得剛拍照的圖像
// 檔案名稱使用時間來記錄
Bitmap bmp = BitmapFactory.decodeFile(imageUri.getPath());
imageView1.setImageBitmap(bmp);
}
super.onActivityResult(requestCode, resultCode, data);
}
我不知道这个错误在哪里。
答案 0 :(得分:0)
如果您的应用无法打开相机,可能需要安装相机应用以响应意图。
这是您的代码中的另一个严重问题。您可以直接从相机加载图像。
这是你的代码:位图bmp = BitmapFactory.decodeFile(imageUri.getPath());
通常情况下图片太大而无法进行缩放。这会导致 OOM异常。如果你的应用是 因OOM异常而崩溃。请尝试以下方法:
public static Bitmap getScaledBitmap(Activity a, String path) {
Display display = a.getWindowManager().getDefaultDisplay();
float destWidth = display.getWidth();
float destHeight = display.getHeight();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
float srcWidth = options.outWidth;
float srcHeight = options.outHeight;
int inSampleSize = 1;
if (srcHeight > destHeight || srcWidth > destWidth) {
if (srcWidth > srcHeight) {
inSampleSize = Math.round(srcHeight / destHeight);
} else {
inSampleSize = Math.round(srcWidth / destWidth);
}
}
options = new BitmapFactory.Options();
options.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
return bitmap ;
}
位图bmp = getScaledBitmap(YourActivity,imageUri.getPath());
答案 1 :(得分:0)
private void startCamera() {
// 使用android內建api
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Case = 10; // camera
// 檔案名稱使用時間來記錄
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
date = sDateFormat.format(new java.util.Date());
// 強制轉型.jpg
date = date + ".jpg";
// 檔案存放地方 還有檔案名稱
tmpFile = new File(Environment.getExternalStorageDirectory()
+ "/DCIM/100ANDRO", date);
imageUri = Uri.fromFile(tmpFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
// this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
// .parse("file://" + tmpFile)));
startActivityForResult(intent, 2);