Wo soll ich das Bild speichern? Internal, external Problem

  • Antworten:7
Gelöschter Account
  • Forum-Beiträge: 2.492

10.04.2014, 15:18:58 via Website

Hallo,

ich habe einen Dialog zu einem Bitmap "konvertiert". Dieses Bitmap möchte ich jetzt über ein Intent versenden, also über Bluetooth, Facebook usw.
1Intent sharingIntent = new Intent(Intent.ACTION_SEND);
2 sharingIntent.putExtra(Intent.EXTRA_STREAM, file);
3 sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
4 sharingIntent.setType("image/jpeg");
5 getContext().startActivity(Intent.createChooser(sharingIntent,"Erfolg teilen!"));

Erst hatte ich das Bitmap so bekommen:
1String path1 = Images.Media.insertImage(getContext().getContentResolver(), cs, "bild.jpg", null);

Doch dann habe ich gemerkt, dass die App dann abstürzt, wenn ein Smartphone kein SD - Karte hat.

Dann habe ich versucht, das Bild im internen Speicher zu speichern mit:
1ContextWrapper cw = new ContextWrapper(mContext);
2 // path to /data/data/yourapp/app_data/imageDir
3 File directory = cw.getDir("imageDir", Context.MODE_WORLD_READABLE);
4 // Create imageDir
5 File mypath=new File(directory,"bild.jpg");
6 FileOutputStream fos = null;
7 try {
8 fos = new FileOutputStream(mypath);
9 // Use the compress method on the BitMap object to write image to the OutputStream
10 bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
11 fos.close();
12 } catch (Exception e) {
13 e.printStackTrace();
14 }
und es dann daraus zu laden um es dann zu versenden. Da habe ich dann aber gemerkt, dass die externen Apps, wie Facebook oder Whatsapp die Datei dann nicht laden können. (Ist glaub ich allgemein so nicht möglich aus dem internen Speicher)

Wie soll ich das Bild denn dann versenden? Wo kann ich es speichern (ist das überhaupt nötig)? Wenn im internen Speicher so nicht geht und auf der SD - Karte auch nicht.
Würde mich sehr freuen wenn hier jemand eine Idee hat :)

— geändert am 10.04.2014, 15:20:44

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2014, 19:02:30 via Website

Das hier sollte helfen:
http://stackoverflow.com/questions/8330276/write-a-file-in-external-storage-in-android

Beachte: in dandroid ist der Pfad "/sdcard" nicht die Externe Sd karte sondern nur der Interne also Datenspeicher für musik etc.
Dafür braucht deine App dann auch die permission

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

10.04.2014, 19:16:48 via Website

Hatte jetzt folgendes gefunden:
1File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
2 File imageFile = new File(path, System.currentTimeMillis()+ ".jpeg");
3 FileOutputStream fileOutPutStream;
4 try {
5 fileOutPutStream = new FileOutputStream(imageFile);
6 cs.compress(Bitmap.CompressFormat.JPEG, 100, fileOutPutStream);
7 fileOutPutStream.close();
8 } catch (FileNotFoundException e) {
9 // TODO Auto-generated catch block
10 e.printStackTrace();
11 } catch (IOException e) {
12 // TODO Auto-generated catch block
13 e.printStackTrace();
14 }
15 Uri file = Uri.parse("file://" + imageFile.getAbsolutePath());
Durch einen Toast zeigt er mir an das liegt dann in /mnt/sdcard/Pictures/... Ist das jetzt im internen speicher oder im externen? Wenn ich nämlich mein Handy ohne sd karte nutze stürzt die App wieder ab.
In deinem Beispiel heißt es ja:
1File root = android.os.Environment.getExternalStorageDirectory();
Das ist doch das gleiche nur ohne den weiteren Schritt das der dann in den Bilder ordner geht oder?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2014, 19:29:17 via Website

Schau halt im Dateibrowser nach ob unter deinem Pfad jetzt ein bild gespeichert ist oder nicht

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

10.04.2014, 19:44:30 via Website

Ne also laut dem eclipse File Explorer ist in dem Order /mnt/sdcard/ gar nichts.

Edit: Gibt es Smartphones ohne internen Speicher? Hab nämlich grad n anderes Handy ohne sd Karte getestet und da geht es.
(Das bei dem es nicht geht ist schon n recht altes, das Samsung Galaxy young)

— geändert am 10.04.2014, 20:01:19

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2014, 20:08:36 via Website

Wenn du auf dem Standart File Explorer von Android guckst, ist dort keine Datei?
Gibt es einen Fehler aus LogCat?
Durchsuche mal deine Externe Sd karte nach diesem File, dann kannst du prüfen ob dieser auf der sd gespeichert wird.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

10.04.2014, 20:18:19 via Website

Der Standard File Explorer zeigt auf dem young immer nur Daten auf der sd Karte an. Beim Astro File Manager gibt es aber auch keinen Telefonspeicher o.ä.
Logcat:
1E/AndroidRuntime(5961): FATAL EXCEPTION: main
2E/AndroidRuntime(5961): java.lang.NullPointerException
3E/AndroidRuntime(5961): at android.graphics.Bitmap.compress(Bitmap.java:584)
4E/AndroidRuntime(5961): at com.kila.schnellerfinger.lars.StatistikDialog.onClick(StatistikDialog.java:206)
Zeile 206 ist:
1bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
Das kommt auch bei meinem HTC one V wenn ich die SD Karte entferne.

Wenn ich das compress aber rausnehme sagt Facebook z.b. das die Mediendatei nicht geladen werden konnte.

— geändert am 10.04.2014, 20:29:00

Antworten
impjor
  • Forum-Beiträge: 1.793

11.04.2014, 18:13:25 via Website

Dann scheint bitmap null zu sein.
Generell ist es so, dass jedes Android Gerät einen Internen und Externen Speicher hat. Der Interen Speicher ist immer verfügbar, der Externe ist nicht verfügbar, wenn die SD-Karte herausgenommen wird. Wenn ein Gerät keinen SD-Slot hat, gibt es trotzdem einen "Exterenen Speicher". Musik, Bilder, Videos und generell alles was öffentlich zugänglich sein soll, muss auf dem Externen Speicher gespeichert werden. D.h., wenn die SD-Karte entfernt ist, arbeiten Apps nicht mehr richtig, die Daten darauf gespeichert haben (z.B. kann WhatsApp nicht auf die Bilder zugreifen oder downloaden.)

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten