2012-06-21 10 views
17

Por casualidad, ¿alguien sabe cómo acceder a la galería de fotos del teléfono? Estoy haciendo una aplicación que toma una fotografía de una hoja de planta y analiza la imagen para determinar si se determina o no. Esperábamos que pudiéramos darle al usuario dos opciones para tomar la fotografía de la hoja o usar una imagen de una hoja que el usuario ya haya tomado. Sin embargo, tenemos la imagen tomando parte, pero no sabemos cómo acceder a la galería de fotos.¿Cómo acceder a una imagen desde la galería de fotos del teléfono?

Respuesta

32

Debe iniciar la aplicación de la Galería utilizando el Intents incorporado. Después de eso, en su onActivityResult(), obtener la ruta de la imagen seleccionada y cargar su imagen en su ImageView

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
<Button 
android:id="@+id/loadimage" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Load Image" 
/> 
<TextView 
android:id="@+id/targeturi" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
/> 
<ImageView 
android:id="@+id/targetimage" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
/> 
</LinearLayout> 

Su actividad

package com.exercise.AndroidSelectImage; 

    import java.io.FileNotFoundException; 

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

    public class AndroidSelectImage extends Activity { 

    TextView textTargetUri; 
    ImageView targetImage; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button buttonLoadImage = (Button)findViewById(R.id.loadimage); 
     textTargetUri = (TextView)findViewById(R.id.targeturi); 
     targetImage = (ImageView)findViewById(R.id.targetimage); 

     buttonLoadImage.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     Intent intent = new Intent(Intent.ACTION_PICK, 
     android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(intent, 0); 
    }}); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK){ 
    Uri targetUri = data.getData(); 
    textTargetUri.setText(targetUri.toString()); 
    Bitmap bitmap; 
    try { 
     bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); 
     targetImage.setImageBitmap(bitmap); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
    } 
    } 

enter image description here

14

Do No olvides agregar los siguientes permisos a AndroidManifest.xml:

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

Im tratando de poner la imagen cargada como fondo ¿sabes cómo? – nothingness

+0

READ_EXTERNAL_STORAGE solo es necesario si todavía no tiene WRITE_EXTERNAL_STORAGE. ¿Estás seguro de que MANAGE_DOCUMENTS tiene sentido? https://developer.android.com/reference/android/Manifest.permission.html dice: "Este permiso solo debe solicitarlo la aplicación de administración de documentos de la plataforma. Este permiso no se puede otorgar a aplicaciones de terceros". –

Cuestiones relacionadas