我有一个使用startActivityForResult启动意图的活动
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,getFilesDir());
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
在同一个班级中,onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
}
else
{
if(resultCode == RESULT_CANCELED){
finish();
}
}
}
该类扩展了AppCompatActivity。 只有当我取消意图时(按下后退按钮时)才会触发onActivityResult。拍摄照片时没有任何反应。
有人有解决方案吗?
我知道这是重复的 https://meta.stackexchange.com/questions/7046/getting-attention-for-unanswered-questions
但根据How to re-ask an old question which is not answered yet?,我只能编辑问题(我显然不允许这样做)并且我没有足够的赏金来放置它,所以我只能问问题再次..
答案 0 :(得分:0)
你有两个错误:
首先,EXTRA_OUTPUT
需要指向文件,而不是目录。
其次,你忽略了EXTRA_OUTPUT
,希望通过"data"
额外的图片回来。
我建议您先评论takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,getFilesDir());
行。此时,有两种可能性:
事情开始奏效。在这种情况下,发生的事情是您的无效EXTRA_OUTPUT
值导致用户选择的相机应用失败。
当用户拍照时,您仍无法控制onActivityResult()
。在这种情况下,相机应用程序很可能是错误的,而且你可以做的很少。
答案 1 :(得分:0)
试试这段代码......
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri=Uri.fromFile(getOutputMediaFile(MEDIA_TYPE_IMAGE));
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
并在您的ActivityResult
中if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
options);
}
private static File getOutputMediaFile(int type) {
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/yourFolderName/");
// Create the storage directory if it does not exist
if (!dir.exists()) {
if (!dir.mkdirs()) {
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(dir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
} else {
return null;
}
System.out.println("Media FIle is:--" + mediaFile);
return mediaFile;
}