Как правильно записать фотографию в память и получить URI (Honeycomb)? - PullRequest
0 голосов
/ 28 ноября 2011

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

    intent.putExtra(MediaStore.EXTRA_OUTPUT,    Uri.fromFile(Environment.getExternalStorageDirectory()));

ниже у вас есть вся функция и код:

    private void takePicture(){
    File outputFile = new File(Environment.getExternalStorageDirectory(), "image.jpg");
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,    Uri.fromFile(Environment.getExternalStorageDirectory()));
    startActivityForResult(intent, 1);
}

public void onActivityResult(int requestCode, int resultCode, Intent data){
       if(requestCode == CAMERA_PIC_REQUEST && resultCode == Activity.RESULT_OK){
           picture = (Bitmap) data.getExtras().get("data");
           pictureView.setImageBitmap(picture);

           ContentValues values = new ContentValues();
           values.put(Images.Media.TITLE, "Picture");
           values.put(Images.Media.BUCKET_ID, "picture_ID");
           values.put(Images.Media.DESCRIPTION, "");
           values.put(Images.Media.MIME_TYPE, "image/jpeg");

           pictureUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
           OutputStream outstream;

           try{
               outstream = getContentResolver().openOutputStream(pictureUri);
               picture.compress(Bitmap.CompressFormat.JPEG, 100, outstream);
               outstream.close();
           }catch(FileNotFoundException e){

           } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       }
   }

Если я прокомментирую эту строку, приложение больше не падает. Мне нужно получить URI фотографии, чтобы я мог отправить ее по электронной почте.

Любая помощь от вас, ребята, более опытная, будет принята с благодарностью.

1 Ответ

1 голос
/ 28 ноября 2011

Попробуйте это

Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File path = new File("/mnt/sdcard/YourDirectory");
path.mkdirs();
String fileName = "yourfile.jpg";
File file = new File(path, name);
camera.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));
startActivityForResult(camera, PICTURE_RESULT);



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (PICTURE_RESULT == requestCode && Activity.RESULT_OK == resultCode) {
    if (android.os.Environment.getExternalStorageState().equals(
                 android.os.Environment.MEDIA_MOUNTED)) {
            //////////   TASK TODO After result    //////////
        } else {
        Toast.makeText(this, "sdcard not available", Toast.LENGTH_LONG).show();
        }
    } 
}
...