Android Dateipfad einer Bilddatei ermitteln

  • Antworten:8
NeuHier
  • Forum-Beiträge: 30

24.08.2013, 12:11:57 via Website

Hallo Community,

ich habe nach der Anleitung von "siamii" http://stackoverflow.com/questions/2507898/how-to-pick-an-image-from-gallery-sd-card-for-my-app-in-android einen Bildauswahldialog erstellt, da ich den Pfad einer beliebigen Bilddatei benötige.

Wenn ich die Bilddatei weiter verarbeiten möchte, bekomme ich die Meldung, dass die Datei nicht gefunden werden kann.
Ich habe mir den Pfad mal ausgeben lassen:
content://media/external/images/media/14
Kann das sein, also ist das ein gültiger Dateipfad? Fehlt da nicht eine Dateiendung?

Danke schon mal für eure Hilfe und schönen Samstag noch.

Gruß,
NeuHier

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

24.08.2013, 12:17:26 via App

Nein, das ist nicht der Pfad.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

24.08.2013, 13:49:00 via Website

Du brauchst den nicht zu wissen.

Setzen des Pfades

ImageView.setImageUri()

Oder

ContentResolver.openInputStream()

liefern dir die Bytes

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
NeuHier
  • Forum-Beiträge: 30

24.08.2013, 20:48:10 via Website

Danke für eure Antworten, dennoch verstehe ich nicht wie ich das Problem lösen kann.

Hier mal mein Code:
1protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
2 super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
3
4 switch(requestCode) {
5 case SELECT_PHOTO:
6 if(resultCode == RESULT_OK){
7 Uri selectedImage = imageReturnedIntent.getData();
8 InputStream imageStream = null;
9 try {
10 imageStream = getContentResolver().openInputStream(selectedImage);
11 } catch (FileNotFoundException e) {
12 e.printStackTrace();
13 }
14
15 final Uri DateipfadHandy = imageReturnedIntent.getData();
16
17
18 upLoadServerUri = "HierEntfernt";
19
20 Thread t = new Thread(){
21 public void run(){
22 String url = upLoadServerUri;
23 File file = new File(DateipfadHandy.getPath());
24 try {
25 HttpClient httpclient = new DefaultHttpClient();
26
27 HttpPost httppost = new HttpPost(url);
28
29 InputStreamEntity reqEntity = new InputStreamEntity(
30 new FileInputStream(file), -1);
31 reqEntity.setContentType("binary/octet-stream");
32 reqEntity.setChunked(true); // Send in multiple parts if needed
33 httppost.setEntity(reqEntity);
34 HttpResponse response = httpclient.execute(httppost);
35
36 } catch (Exception e) {
37 Log.e("fotoboxx", "Fehlermeldung: " + e.getMessage().toString());
38 }
39 }
40 };
41 t.start();
42 try {
43 t.join();
44 } catch (InterruptedException e) {
45 e.printStackTrace();
46 }
47 }
48 }
49 }

Ich übergebe doch direkt die Uri, die ich erhalten habe, trotzdem erhalte ich immer die Meldung:
08-24 18:40:16.036 895-943/com.fotoboxxv1.fotoboxxat E/fotoboxx: Fehlermeldung: /external/images/media/14: open failed: ENOENT (No such file or directory)

Aber der Auswahldialog scheint zu funktionieren, wenn ich das nächste Bild markiere, erhalte ich als Pfad
content://media/external/images/media/15
Der Auswahldialog ist aber ohne die Uploadfunktion sinnlos.

Danke schon mal für eure Bemühungen und schönen Abend noch.

— geändert am 24.08.2013, 20:49:13

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

25.08.2013, 10:31:10 via App

Du musst aus diesem Content Pfad den richtigen Pfad ermitteln. Dummerweise kann ich Dir nicht sagen, wie das in Java direkt geht. Aber es geht. Ich entwickle in Basic4Android und da geht das so:

http://www.basic4ppc.com/android/forum/threads/uri-content-media-to-real-file.13473/#post-76176

Eventuell kannst Du daraus ein paar Hinweise auf das Verfahren mit Java direkt entnehmen.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

impjor

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.08.2013, 16:48:01 via Website

Hast du mal versucht das Bitmap zu bekommen ?

http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html

Ca so:

1ContentResolver cr = mActivity.getContentResolver();
2 Bitmap bitmap;
3 try {
4 bitmap = android.provider.MediaStore.Images.Media
5 .getBitmap(cr, imageUri);

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
NeuHier
  • Forum-Beiträge: 30

25.08.2013, 20:13:23 via Website

Danke für eure Antworten.

@Mac Systems
An das Bitmap würde ich schon so kommen:
1Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);

Aber was würde mir das nutzen? Ich benötige doch den Dateipfad/die Uri, für diesen Codeabschnitt:
1File file = new File(DateipfadHandy.getPath());

@Carsten Müller
In diesem verlinkten Threat geht es zwar genau um das selbe Problem, aber leider nicht um die selbe Sprache. Mit Basic4Android kann ich nicht wirklich etwas anfangen.

Hat jemand noch eine Idee?

Schönen Sontagabend noch.

— geändert am 25.08.2013, 20:14:03

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

25.08.2013, 21:55:32 via App

NeuHier

In diesem verlinkten Threat geht es zwar genau um das selbe Problem, aber leider nicht um die selbe Sprache.
Was ich Dir ja auch gesagt hatte...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten