2012-05-21 20 views
7

En mi aplicación, tengo un botón1 que llama a la cámara, y luego de capturar la imagen, debe guardarse en la galería del dispositivo. Cuando hago clic en el botón 2, debe abrir la galería y solicitar seleccionar una imagen. Cuando se selecciona, debe mostrarse en el imageView debajo de estos botones.Llamar a la cámara desde una actividad, capturar una imagen y cargarla en un servidor

Aquí está mi código:

package com.android.imageuploading; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class ImageUploadingActivity extends Activity { 
    private static final int REQUEST_CODE = 1; 
    private Bitmap bitmap; 
    private ImageView imageView; 
    private Button button_1; 
    public int TAKE_PICTURE = 1; 
    private Button button_2; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     imageView = (ImageView) findViewById(R.id.image); 
     button_1 = (Button) findViewById(R.id.button1); 
     button_1.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
       startActivityForResult(intent, TAKE_PICTURE); 

      } 
     }); 
     button_2 = (Button) findViewById(R.id.button2); 
     button_2.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       pickImage(getCurrentFocus()); 
      } 
     }); 
    } 

    public void pickImage(View view) { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     intent.addCategory(Intent.CATEGORY_OPENABLE); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) 
      try { 
       // We need to recyle unused bitmaps 
       if (bitmap != null) { 
        bitmap.recycle(); 
       } 
       InputStream stream = getContentResolver().openInputStream(
         data.getData()); 
       bitmap = BitmapFactory.decodeStream(stream); 
       stream.close(); 
       imageView.setImageBitmap(bitmap); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

    public static boolean isIntentAvailable(Context context, String action) { 
     final PackageManager packageManager = context.getPackageManager(); 
     final Intent intent = new Intent(action); 
     List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 
       PackageManager.MATCH_DEFAULT_ONLY); 
     return list.size() > 0; 
    } 
} 

El problema es, cuando capture la imagen, se le pide guardar o descartar. Cuando hago clic en Guardar, mis aplicación se bloquea, diciendo:

java.lang.RuntimeException: resultado la entrega de fracaso ResultInfo {quien = null, solicitar = 1, resultado = -1, los datos Intención = {act = inline- de datos (tiene extras)}} {com.android.imageuploading a la actividad/com.android.imageuploading.ImageUploadingActivity}: java.lang.NullPointerException

¿Dónde tengo que cambiar el código?

+0

posible duplicado de [actividad de Android para abrir la cámara y subir una imagen a un servidor] (http: // stackoverflow .com/preguntas/10663019/android-actividad-a-cámara abierta y-carga-un-imagen-a-un-servidor) – Sam

Respuesta

4

en mi caso, utilizo esto: cuando hago clic en el botón Guardar, pic se guarda y me devuelve la ruta en la variable filePath.

String filePath = 
     Environment.getExternalStorageDirectory() +"/your_image_name.jpeg"; 
File file = new File(filePath); 
Uri output = Uri.fromFile(file); 
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, output); 

y en onactivityresul() uso this "filePath".

+0

hay necesidad de especificar en hacer clic en el botón Guardar ??? ... este código de forma automática guarda la imagen en galle ¿ry? – Housefly

+0

, por supuesto, se llama a este método en botón de clic button_1.setOnClickListener (nueva View.OnClickListener(). –

+0

no estoy hablando eh botón que es visible salvo cuando capturamos cualquier imagen .... que no tiene la referencia a ese botón ... ¿verdad ??? – Housefly

4

Captura de Imagen:

public class Camera extends Activity 
    { 
private static final int CAMERA_REQUEST = 1888; 
private String selectedImagePath; 
WebView webview; 
String fileName = "capturedImage.jpg"; 
private static Uri mCapturedImageURI; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Intent cameraIntent = new Intent(ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == RESULT_OK) { 
     if (requestCode == CAMERA_REQUEST) 
     { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 
      Random randomGenerator = new Random();randomGenerator.nextInt(); 
      String newimagename=randomGenerator.toString()+".jpg"; 
      File f = new File(Environment.getExternalStorageDirectory() 
            + File.separator + newimagename); 
      try { 
       f.createNewFile(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //write the bytes in file 

      try { 
       fo = new FileOutputStream(f.getAbsoluteFile()); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       fo.write(bytes.toByteArray()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       uri=f.getAbsolutePath(); 
    //this is the url that where you are saved the image 
     } 



    } 

elegir Imagen:

public class ChoosePicture extends Activity 
    { 
     private static final int SELECT_PICTURE = 1; 
     private String selectedImagePath; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      webview=(WebView)findViewById(R.id.webView1); 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      intent.addCategory(Intent.CATEGORY_OPENABLE); 
      startActivityForResult(intent, SELECT_PICTURE); 
     } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (resultCode == RESULT_OK) { 
      if (requestCode == SELECT_PICTURE) 
      { 
       Uri selectedImageUri = data.getData(); 
       selectedImagePath = getPath(selectedImageUri); 
       try { 
        FileInputStream fileis=new FileInputStream(selectedImagePath); 
        BufferedInputStream bufferedstream=new BufferedInputStream(fileis); 
        byte[] bMapArray= new byte[bufferedstream.available()]; 
        bufferedstream.read(bMapArray); 
        Bitmap bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length); 
    //this is the image that you are choosen 

        if (fileis != null) 
        { 
         fileis.close(); 
        } 
        if (bufferedstream != null) 
        { 
         bufferedstream.close(); 
        } 
       } catch (FileNotFoundException e) {     
        e.printStackTrace(); 
       } catch (IOException e) {     
        e.printStackTrace(); 
       }    
      } 
     } 
    } 


public String getPath(Uri uri) { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
} 
Cuestiones relacionadas