2012-10-12 128 views
5

Duplicar posibles:
Using Camera and storing captured result in SDCard in androidabrir una aplicación de la cámara por la intención y guardar la imagen en la SD y imageView

Quiero llegar a la vista de la aplicación de la cámara, guardarlo en SD y conjunto imageView. Hice un código a continuación. guardar y imageView a veces funciona. pero a veces la imagen se guarda en SD y imageView no funciona.

Cuando imageView no funciona, parece que mOutUri se vuelve nulo en el resultado de la actividad.

He intentado guardar un mOutUri en SharedPreferences en clkbutton. Puedo ver el uri en el resultado de actividad, pero el imageView no funciona. en este momento, mOutUri también es nulo.

public void clkbutton(View v){ 
    Intent intent = new Intent(); 

    // open camera app 
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 

    // save data in SD card 
    Date date = new Date(); 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd-kk-mm-ss"); 
    String newPicFile = df.format(date) + ".jpg"; 
    mNewPicFile = newPicFile; 
    String outPath = "/sdcard/" + newPicFile; 
    File outFile = new File(outPath); 
    mOutUri = Uri.fromFile(outFile); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutUri);  
    startActivityForResult(intent, REQUEST_CAPTURE_IMAGE); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    ImageView imageView = (ImageView) findViewById(R.id.image_view); 
    imageView.setImageURI(mOutUri);  
} 

Es tan raro que a veces los errores y, a veces funciona.

Respuesta

0

En onActivityResult antes de configurar ImageUri, debe comprobar si el archivo existe. Puede perder el contenido de mOutUri cuando la aplicación cambia de orientación, y sucede en algún momento cuando abre la cámara. Debería implementar en actividad en SaveInstanceState donde almacena las preferencias uri y onRestoreInstanceState donde restaura su uri.

0

tratar el siguiente código:

static Uri capturedImageUri=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
Button photoButton = (Button) this.findViewById(R.id.button1); 
    photoButton.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    Calendar cal = Calendar.getInstance(); 
    File file = new File(Environment.getExternalStorageDirectory(), (cal.getTimeInMillis()+".jpg")); 
    if(!file.exists()){ 
    try { 
    file.createNewFile(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     }else{ 
    file.delete(); 
    try { 
    file.createNewFile(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
capturedImageUri = Uri.fromFile(file); 
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
startActivityForResult(i, CAMERA_RESULT); 
    } 
}); 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) { 
    //Bitmap photo = (Bitmap) data.getExtras().get("data"); 
    //imageView.setImageBitmap(photo); 
    try { 
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), capturedImageUri); 
    imageView.setImageBitmap(bitmap); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } 
    } 
    } 

y también no se olvide de añadir algunos permisos en el archivo manifets Android como:

`note: add permission WRITE_EXTERNAL_STORAGE in manifest file.` 
+0

Gracias por su comentario. He intentado con tu código pero a veces todavía no funciona. ¿¿Cuál crees que es el problema?? – Jason

Cuestiones relacionadas