2014-11-30 2 views
0

Я пытался получить данные 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); 
} 

ответ

0

Я не знаю, если это все-таки касается вас, но я дам ему идти.

Непонятно, что вы пытаетесь сделать. Когда у вас есть запрос к , выберите изображение, uri выбранного изображения будет доступен в данных Intent. Когда у вас есть запрос к , возьмите фотографию с камерой, это вы решаете, где она будет спасена. Именно эта строка кода:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 

Таким образом, в этом случае, вы всегда будете получать нуль в ваших Намерение данных, так как вам не нужно: фотография сохраняется на любом Uri photoFile держит.

Вы явно не нужна эта строка:

mImageData = takePictureIntent.getData(); //Trying to save the data 

... и там также нет необходимости сохраняться его в onSaveInstanceState.

Надеюсь, это поможет. Удачи!

+0

Это то, что я закончил делать. Я проверю это как принято, потому что другим может понадобиться помощь для него. Благодаря! –