几乎在所有设备上都能正常工作,但是一旦捕获图像并且用户按下保存,就会重新打开相机。
启动相机:
private void launchCamera() {
try
{
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = getFilePath(2);
imageUri = Uri.fromFile(file);
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(cameraIntent, 1);
}catch(Exception e){
Log.v("Exception ", e.toString());
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
try {
if (resultCode == RESULT_OK){
switch (requestCode) {
case 1:
try{
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
imgView.setImageBitmap(bitmap);
break;
}catch (Exception e) {
Log.v("Exception ", e.toString());
}
default:
break;
}
}
}
catch(Exception e){
Log.v("Exception ", e.toString());
}
}
创建临时文件路径:
private File getFilePath(int type) {
File mediaFile = null;
try{
File mediaStorageDir = null;
Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(isSDPresent) {
String path = Environment.getExternalStorageDirectory()+"/MyFolder";
mediaStorageDir = new File(path);
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.v("Exception ", "failed to create directory");
return mediaFile;
}
}
} else {
mediaStorageDir = appContext.getDir("MyFolder", Context.MODE_PRIVATE);
}
if (type == 2){
mediaFile = new File(mediaStorageDir.getPath() + File.separator + "MyFolder_IMG_"+ String.valueOf(UUID.randomUUID()) + ".png");
}
} catch(Exception e){
Log.v("Exception ", e.toString());
}
return mediaFile;
}
答案 0 :(得分:0)
这几乎适用于所有设备
充其量,它可以正常工作"对于您尝试过的设备,以及您在这些设备上尝试过的相机应用。 Android设备型号超过10,000种,Play商店中有数百种相机应用程序。这导致数百万种组合。
理想情况,MediaStore.ACTION_IMAGE_CAPTURE
启动的活动会在用户拍照后通过setResult()
和finish()
将控制权返回给您的应用。但是,没有要求,通过任何类型的批准过程验证,迫使相机应用程序的开发人员在用户拍照后将控制权返还给您。
您的选择要么与现有行为一起生活,建议用户在需要时按BACK返回您的应用,或者跳过MediaStore.ACTION_IMAGE_CAPTURE
并实施您自己的逻辑以使用相机拍照。