2011-11-03 42 views
7

De acuerdo, estoy creando una aplicación de Android y utilizando CAPTURE_PIC_REQUEST para tomar una foto y almacenarla como una vista previa en la pantalla en un visor de imágenes. Quería saber cómo obtener la ruta URI y en realidad porque estoy planeando tomar esa información, guardarla y acceder a ella más adelante. Así que no puedo entender cómo obtener el URI o el nombre de ruta de esa imagen que acabo de tomar. Aquí está el código de mi actividad que está manejandoObtener la ruta del archivo de una imagen en ImageView

package com.CS480; 

import java.io.File; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class AddEx extends Activity { 
    static final int CAMERA_PIC_REQUEST = 1337; 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add); 

    Button camera = (Button) findViewById(R.id.picButton); 
    camera.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);    
     }    
    }); 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.returnedPic); 
     image.setImageBitmap(thumbnail); 
    } 
} 

} 

Entonces, ¿cómo de esa imagen que me estoy haciendo de nuevo en la aplicación puedo obtener la ubicación del archivo

Respuesta

8

Por lo que yo sé, puede hacer algo como esto:

private Uri mImageCaptureUri; 

public class AddEx extends Activity { 
    static final int CAMERA_PIC_REQUEST = 1337; 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add); 

    Button camera = (Button) findViewById(R.id.picButton); 
    camera.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent cameraIntent = 
        new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, 
        mImageCaptureUri); 
      startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);    
     }    
    }); 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ImageView image = (ImageView) findViewById(R.id.returnedPic); 
     image.setImageBitmap(thumbnail); 

     String pathToImage = mImageCaptureUri.getPath(); 

     // pathToImage is a path you need. 

     // If image file is not in there, 
     // you can save it yourself manually with this code: 
     File file = new File(mImageCaptureUri.getPath()); 
     FileOutputStream fOut = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); // You can choose any format you want 
    } 
}  

De la documentación sobre Android android.provider. MediaStore.EXTRA_OUTPUT:

El nombre del Intent-extra utilizado para indicar un resolutor de contenido Uri para ser utilizado para almacenar la imagen o el video solicitado.

1

Usted puede intentar conseguir el URI de la imagen con

data.getExtras.get("URI"); 

pero esto podría no funcionar. Lo que puede hacer es simplemente guardar el Bitmap usted mismo. Consulte esta pregunta para obtener una guía sobre cómo hacerlo: Save bitmap to location

1

Cuando toma su imagen, debe almacenarla en algún lugar para obtener la ubicación de la imagen.

Para ello, se puede almacenar a la MediaStore:

String result = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", ""); 

imageFileUri = Uri.parse(result); 
0

Prueba este get archivo de imagen de mapa de bits forma ruta

public void uploadBitmap(Context mContext, Bitmap bitmap) { 

    String imagePath = null; 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    Uri uri; 
    Cursor cursor = mContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, MediaStore.Images.Media.DATE_ADDED, null, "date_added DESC"); 
    if (cursor != null && cursor.moveToFirst()) { 
     do { 
      uri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))); 
      imagePath = uri.toString(); 
      Log.d("pathatka", uri.toString()); 
      break; 
     } while (cursor.moveToNext()); 
     cursor.close(); 
    } 

} 
Cuestiones relacionadas