2011-09-01 18 views
9

Hey, sono nuovo su Android e ho cercato di creare un'applicazione di recente. Fondamentalmente, quello che voglio fare è consentire all'utente di creare la propria cartella e quindi andare a un'attività che contiene un pulsante per avviare la fotocamera. Da lì voglio essere in grado di avviare la fotocamera e salvare le immagini della videocamera nella cartella appena creata. Ho problemi con l'ultima parte del salvataggio delle immagini della videocamera nella cartella appena creata.Come salvare le immagini dalla fotocamera in Android su una cartella specifica?

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); 

     } 
    }); 

Da qui la transizione in questa attività:

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); 
     } 
    });   
    } 
} 

prego di dirmi come per salvare le immagini dalla fotocamera nella cartella appena creata. Voglio che l'utente sia in grado di scattare diverse foto e quindi salvare queste diverse immagini in quella specifica cartella. Grazie in anticipo!

risposta

11

aggiungere questo codice prima di chiamare l'attività della macchina fotografica,

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

Che cosa è "uscita "e perché dovrebbe funzionare? Non si dovrebbe usare una costante di qualche tipo? –

+0

MediaStore.EXTRA_OUTPUT è la costante – Teodor

+2

Non funziona. Esiste sicuramente qualcosa di sbagliato in EXTRA_OUTPUT. – zgulser

0

È necessario aggiungere la posizione del file all'intento di acquisizione dell'immagine. Per esempio:

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

Date un'occhiata here

1

Prova questo ....

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); 

e tu non hai implementato onActivityResult .... provare questo può aiutare 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(); 
      } 
     } 
    } 

auguro che si ottiene è ..........

+1

CAPTURE_IMAGE_ACTIVITY non è altro che un numero intero, puoi usare il valore dell'interger semplice della tua scelta, ad esempio 99/7/67 qualsiasi cosa. È usato per verificare il codice di richiesta. Ad esempio, 1 attività può avviare molte altre attività, ma ogni richiesta dovrebbe avere un codice di richiesta univoco, che può essere verificato al momento del ritorno di ogni attività all'interno di AtActivityResult nell'attività principale. Verificare il codice di richiesta per sapere quale attività è stata restituita. –

+0

@Richa cos'è isImageTaken che tipo di variabile isImageTaken .... – Amitsharma

Problemi correlati