2011-09-01 15 views
9

Hola, soy nuevo en Android y he estado tratando de hacer una aplicación recientemente. Básicamente, lo que quiero hacer es permitir al usuario crear su propia carpeta y luego ir a una actividad que contiene un botón para iniciar la cámara. Desde allí quiero poder iniciar la cámara y guardar las imágenes de la cámara en la carpeta recién creada. Tengo problemas con la última parte de guardar las imágenes de la cámara en la carpeta recién creada.¿Cómo guardar imágenes de la cámara en Android en una carpeta específica?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button b = (Button) findViewById(R.id.button1); 
    b.setOnClickListener(new OnClickListener() { 


     EditText text = (EditText)findViewById(R.id.editText1); 
     EditText text2 = (EditText)findViewById(R.id.editText2); 



     @Override 
     public void onClick(View v) { 

      final String name = text.getText().toString(); 
      final String placeName = text2.getText().toString(); 

      String place = placeName.substring(0,3); 
      String direct = name + place ; 

      File folder = new File("/sdcard/CameraTest/" + direct + "/"); 
      folder.mkdirs(); 

      Intent myIntent = new Intent(CameraTestActivity.this, Press.class); 
      myIntent.putExtra("key", "/sdcard/CameraTest/" + direct + "/"); 
      startActivity(myIntent); 

     } 
    }); 

Desde aquí transición a esta actividad:

public class Press extends Activity { 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.afterenter); 
     final String direct = this.getIntent().getStringExtra("key"); 


     // TODO Auto-generated method stub 
     Button p = (Button) findViewById(R.id.button2); 
     p.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent camera= new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

       startActivityForResult(camera, 1); 

      } 
     }); 



    Button np = (Button) findViewById(R.id.button3); 
    np.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent next = new Intent(Press.this, CameraTestActivity.class); 
      startActivity(next); 
     } 
    });   
    } 
} 

Por favor, dígame cómo guardar las imágenes de la cámara en la carpeta recién creada. Quiero que el usuario pueda tomar varias fotos y luego guardar estas varias imágenes en esa carpeta específica. ¡Gracias por adelantado!

Respuesta

11

añadir este código antes de llamar a la actividad de la cámara,

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/flashCropped.png")); 
camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
startActivityForResult(camera, 1); 
+0

¿Qué es "la salida "¿y por qué debería funcionar? ¿No debería uno usar una constante de algún tipo? –

+0

MediaStore.EXTRA_OUTPUT es la constante – Teodor

+2

No funciona. Definitivamente hay algo mal con EXTRA_OUTPUT. – zgulser

0

Debe agregar la ubicación del archivo a la intención de captura de la imagen. Por ejemplo:

camera.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, [file location]); 

Tome una mirada here

1

Prueba este ....

path = Environment.getExternalStorageDirectory() + "/photo1.jpg";

 File file = new File(path); 
     Uri outputFileUri = Uri.fromFile(file); 
     Intent intent = new Intent(
       android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY); 

y usted no ha implementado onActivityResult .... probar esto puede ayudar u

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    System.gc(); 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY) { 
     if (resultCode == Activity.RESULT_OK) { 
      try { 
       // Call function MakeFolder to create folder structure if 
       // its not created 
       if(imageBitmap != null) { 
        imageBitmap = null; 
        imageBitmap.recycle(); 
       } 
       MakeFolder(); 
       // Get file from temp1 file where image has been stored 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inSampleSize = 3; 
       imageBitmap = BitmapFactory.decodeFile(path, options); 
       imgForPhotograph.setImageBitmap(imageBitmap); 
       isImageTaken = true; 
       // Name for image 
       IMAGEPATH = getString(R.string.chassisImage) 
         + System.currentTimeMillis(); 
       SaveImageFile(imageBitmap,IMAGEPATH); 
      } catch (Exception e) { 
       Toast.makeText(this, "Picture Not taken", 
           Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 
    } 

Esperanza se obtiene ..........

+1

CAPTURE_IMAGE_ACTIVITY no es más que un número entero, puede usar el valor de interger simple de su elección, digamos 99/7/67 cualquier cosa. Se usa para verificar el código de solicitud. Por ejemplo, la actividad 1 puede iniciar muchas otras actividades, pero cada solicitud debe tener un código de solicitud único, que se puede verificar al regresar cada actividad dentro de ActivityResult en su actividad principal. Verifique el código de solicitud para saber qué actividad ha regresado. –

+0

@Richa ¿qué es isImageTaken qué tipo de isImageTaken variable .... – Amitsharma

Cuestiones relacionadas