Я пытался получить данные Uri для сохранения функции камеры, но мне не повезло. Я использовал несколько примеров в stackoverflow, но до сих пор не понимаю, что я делаю неправильно. данные намерения в onActivityResult равны нулю, поскольку активность камеры разрушает MainActivity, в которой я работаю. Я попытался сохранить это в SaveInstanceState, но я все еще получаю null. Что мне не хватает?Использование данных с намерением MediaStore.EXTRA_OUTPUT
вот saveInstanceState:
@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);
}
Это то, что я закончил делать. Я проверю это как принято, потому что другим может понадобиться помощь для него. Благодаря! –