Android 利用intent MediaStore.EXTRA_输出的数据
我一直在试图从一个摄像头函数中保存我的Uri数据,但我没有运气。我已经使用了几个关于stackoverflow的例子,但仍然不明白我做错了什么。onActivityResult中的意图数据为空,因为相机活动正在破坏我正在使用的主活动。我试图将其保存在SaveInstanceState中,但仍然为空。我错过了什么 以下是saveInstanceState:Android 利用intent MediaStore.EXTRA_输出的数据,android,io,uri,Android,Io,Uri,我一直在试图从一个摄像头函数中保存我的Uri数据,但我没有运气。我已经使用了几个关于stackoverflow的例子,但仍然不明白我做错了什么。onActivityResult中的意图数据为空,因为相机活动正在破坏我正在使用的主活动。我试图将其保存在SaveInstanceState中,但仍然为空。我错过了什么 以下是saveInstanceState: @Override protected void onSaveInstanceState(Bundle state){ su
@Override
protected void onSaveInstanceState(Bundle state){
super.onSaveInstanceState(state);
if (mImageData != null) {
state.putString("cameraImageUri", mImageData.toString());
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.containsKey("cameraImageUri")) {
mImageData = Uri.parse(savedInstanceState.getString("cameraImageUri"));
}
}
以下是意图设置和文件创建者:
private void dispatchTakePictureIntent() {
log("in dispatchTakePictureIntent()");
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
log("Exception caught. Aborting image creation" + ex);
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
mImageData = takePictureIntent.getData(); //Trying to save the data.
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
log("in onActivityResult()");
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK){
//Intent data is null right here.
Uri selectedImage = data.getData();
ImageView photo = (ImageView) findViewById(R.id.imageView1);
Bitmap mBitmap = null;
try
{
mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
}
catch (IOException e)
{
e.printStackTrace();
}
SelfieObject selfie = new SelfieObject(mCurrentPhotoPath, photo);
startNotification();
//method call for ListViewAdapter.add
//addNewPic(selfie);
}
}
private File createImageFile() throws IOException {
log("in createImageFile()");
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
public void addNewPic(SelfieObject selfie){
log("in addNewPic()");
mAdapter.add(selfie);
}
我不知道这是否还与你有关,但我会试试看 不清楚你想做什么。当您请求拾取图像时,所拾取图像的uri将在意图数据中可用。当你有一个用相机拍照的请求时,由你决定保存在哪里。代码中的这一行:
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
因此,在这种情况下,您的意图数据中总是会得到null,因为您不需要它:照片保存在任何uriphotofile中
您显然不需要这一行:
mImageData = takePictureIntent.getData(); //Trying to save the data
。。。而且也没有必要将其保存在onSaveInstanceState中
我希望有帮助。祝你好运 这就是我最后做的。我会将此检查为已接受,因为其他人可能也需要帮助。谢谢