2013-03-15 18 views
13

Ich habe eine App, die Bilder machen und hochladen kann. Der Upload erfordert den Dateipfad des Fotos, aber ich kann es nicht bekommen.Get Dateipfad des Bildes auf Android

Dies ist mein Code:

public void maakfoto (View v) { 

     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 

    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      imageView.setImageBitmap(photo); 
      knop.setVisibility(Button.VISIBLE); 
      System.out.println(mImageCaptureUri); 
     } 
    } 

Bitte mir helfen, den Dateipfad zu erhalten.

Danke

+0

http bin mit: // Stackoverflow.com/Fragen/9564538/how-to-upload-Bilder-to-PHP-Server-und-store-in-phpmyadmin Hoffnung dieses abgestürzt –

Antwort

37

Posting auf Twitter muss das tatsächlichen Pfad des Bildes auf dem Gerät in der Anfrage senden gesendet werden. Ich fand es sehr schwierig, den richtigen Weg zu finden, und meistens würde ich den falschen Weg finden.

Um das zu kontern, benutze ich, sobald Sie eine Bitmap haben, um den URI von der Verwendung der getImageUri() zu bekommen. Anschließend verwende ich die Uri-Instanz tempUri, um den tatsächlichen Pfad wie auf dem Gerät zu erhalten.

Dies ist Produktionscode und natürlich getestet. ;-)

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
     knop.setVisibility(Button.VISIBLE); 


     // CALL THIS METHOD TO GET THE URI FROM THE BITMAP 
     Uri tempUri = getImageUri(getApplicationContext(), photo); 

     // CALL THIS METHOD TO GET THE ACTUAL PATH 
     File finalFile = new File(getRealPathFromURI(tempUri)); 

     System.out.println(mImageCaptureUri); 
    } 
} 

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
    return Uri.parse(path); 
} 

public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
} 
+1

Ich habe "Lieferung fehlgeschlagen 'Ergebnis'. –

+0

@RickdeJong: Verwenden Sie den Code genau wie in der Post? Wenn Sie es sind, sollte es funktionieren. –

+0

Jep, Kopieren + Einfügen –

0

Um ein Bild, das Sie einen Weg, um bestimmen müssen, wo Sie das Bild gespeichert mögen und dass in der Absicht, als Statist passieren, zum Beispiel:

private void capture(){ 
    String directoryPath = Environment.getExternalStorageDirectory() + "/" + IMAGE_DIRECTORY + "/"; 
    String filePath = directoryPath+Long.toHexString(System.currentTimeMillis())+".jpg"; 
    File directory = new File(directoryPath); 
    if (!directory.exists()) { 
     directory.mkdirs(); 
    } 
    this.capturePath = filePath; // you will process the image from this path if the capture goes well 
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(filePath))); 
    startActivityForResult(intent, REQUEST_CAPTURE);     

} 

Ich habe nur den obigen Teil von einer anderen Antwort kopiert, die ich gegeben habe.

Um Sie jedoch zu warnen, gibt es viele Ungereimtheiten mit Bilderfassungsverhalten zwischen Geräten, die Sie beachten sollten. Hier

ist ein Problem, das ich auf einigen HTC-Geräten lief in, wo sie in der Lage retten würde ich bestanden und in seiner Standardposition führt doppelte Bilder auf dem Gerät: Deleting a gallery image after camera intent photo taken

+0

auch helfen wird, ( –

+0

@RickdeJong Was ist der Fehler –

0

Probieren Sie mit mImageCaptureUri.getPath(); von Below Art und Weise:

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

      //Get your Image Path 
      String Path=mImageCaptureUri.getPath(); 

      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      imageView.setImageBitmap(photo); 
      knop.setVisibility(Button.VISIBLE); 
      System.out.println(mImageCaptureUri); 
     } 
+0

App? stürzt ab, wenn ich das getan habe. –

+0

könnte es sein, weil mImageCaptureUri nicht definiert und initialisiert wird. global versuchen, es global zu definieren und es in putextra übergeben, während die Absicht für captureimage gesetzt wird. –

+0

Wie geht das? –

0

Ich mache das auf Knopfdruck.

private static final int CAMERA_PIC_REQUEST = 1; 

private View.OnClickListener OpenCamera=new View.OnClickListener() { 

      @Override 
      public void onClick(View paramView) { 
       // TODO Auto-generated method stub 

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

       NewSelectedImageURL=null; 
       //outfile where we are thinking of saving it 
       Date date = new Date(); 
       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); 

       String newPicFile = RecipeName+ df.format(date) + ".png"; 


       String outPath =Environment.getExternalStorageDirectory() + "/myFolderName/"+ newPicFile ; 
       File outFile = new File(outPath);    

       CapturedImageURL=outFile.toString(); 
       Uri outuri = Uri.fromFile(outFile); 
       cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, outuri);    
       startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

      } 
     }; 

Sie können die URL des kürzlich aufgenommenen Bildes von variablen CapturedImageURL bekommen

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 


    ////////////////////////////////////// 
    if (requestCode == CAMERA_PIC_REQUEST) { 
     // do something 

     if (resultCode == RESULT_OK) 
     { 
      Uri uri = null; 

      if (data != null) 
      { 
       uri = data.getData(); 
      } 
      if (uri == null && CapturedImageURL != null) 
      { 
       uri = Uri.fromFile(new File(CapturedImageURL)); 
      } 
      File file = new File(CapturedImageURL); 
      if (!file.exists()) { 
       file.mkdir(); 
       sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+Environment.getExternalStorageDirectory()))); 
      } 




     } 


    } 
0

dieser Funktion wird die Aufnahme-Bild Pfad

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
      Uri mImageCaptureUri = intent.getData(); 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      imageView.setImageBitmap(photo); 
      knop.setVisibility(Button.VISIBLE); 
      System.out.println(mImageCaptureUri); 
      //getImgPath(mImageCaptureUri);// it will return the Capture image path 
     } 
    } 

public String getImgPath(Uri uri) { 
     String[] largeFileProjection = { MediaStore.Images.ImageColumns._ID, 
       MediaStore.Images.ImageColumns.DATA }; 
     String largeFileSort = MediaStore.Images.ImageColumns._ID + " DESC"; 
     Cursor myCursor = this.managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       largeFileProjection, null, null, largeFileSort); 
     String largeImagePath = ""; 
     try { 
      myCursor.moveToFirst(); 
      largeImagePath = myCursor 
        .getString(myCursor 
          .getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA)); 
     } finally { 
      myCursor.close(); 
     } 
     return largeImagePath; 
    } 
-1

Einfache Pass Intent erste

zu bekommen
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(i, RESULT_LOAD_IMAGE); 

Und u wird Bildpfad bekommen auf u

onActivityResult
@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 
      ImageView imageView = (ImageView) findViewById(R.id.imgView); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 
    } 
-1

Um den Pfad aller Bilder in android erhalte ich folgenden Code

public void allImages() 
{ 
    ContentResolver cr = getContentResolver(); 
    Cursor cursor; 
    Uri allimagessuri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    String selection = MediaStore.Images.Media._ID + " != 0"; 

    cursor = cr.query(allsongsuri, STAR, selection, null, null); 

    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do { 

       String fullpath = cursor.getString(cursor 
         .getColumnIndex(MediaStore.Images.Media.DATA)); 
       Log.i("Image path ", fullpath + ""); 


      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 
    } 

}