SD-Card von internem Speicher unterscheiden (Api 8)

  • Antworten:2
Roman
  • Forum-Beiträge: 20

31.12.2012, 17:32:02 via Website

Hallo zusammen,

wie ich im Titel schon andeute, versuche ich die eingelegte SD-Karte vom internen Speicher zu unterscheiden. Leider steht mir .isExternalStorageRemovable() nicht zur Verfügung und so habe ich letztlich den Tip aus der c't 23/12, S. 172 befolgt.
Mit folgendem Code ermittel ich die Laufwerke:

1File root;
2
3try {
4 Scanner scanner = new Scanner(new File("/proc/mounts"));
5 while (scanner.hasNext()) {
6 String strZeile = scanner.nextLine();
7 if (strZeile.startsWith("/dev/block/vold/")) {
8 String[] strSplit = strZeile.split(" ");
9 root = new File(strSplit[1]);
10 if (root.isDirectory() && root.canWrite()) {
11 // den 1. gefundenen Speicher als internen annehmen (c't 23/12, S. 172)
12 if (_lstLaufwerke.size() == 0) {
13 _lstLaufwerke.add(new C_Device("internal\nstorage", root, false));
14 } else {
15 _lstLaufwerke.add(new C_Device("external\nsd card", root, true));
16 }
17 }
18 }
19 }
20} catch (Exception e) {
21 e.printStackTrace();
22}

Das ist nur ein Ausschnitt; _lstLaufwerke ist eine ArrayList vom Typ C_Device, in dieser Klasse speicher ich Bezeichnung, Pfad und das Flag, ob interner oder externer Speicher.
Wie auch immer, ich habe mir zu Testzwecken das Huawei Smartphone aus dem Lidl gekauft und hier ist der erste Speicher die SD-Card und der zweite in der Liste der interne Speicher. Das ist dann wohl die Ausnahme von der Regel :-). Jedenfalls sind die beiden Speicher-Quellen in der übergeordneten Activity vertauscht. Ich könnte ja einfach die Namen sdcard und sdcard2 übernehmen, schließlich sollte ja jeder wissen, was er wo drauf gespeichert hat und daran die SD-Card erkennen. Aber diese Lösung ist ja nicht so toll.

Meine Frage lautet also: Wie kann ich feststellen, ob der gefundene Speicher eine SD-Card ist?

Ich hau mich vor der Nachtschicht (einer verliert immer) nochmal aufs Ohr und wünsche euch schonmal einen guten Rutsch, feiert für mich mit :-)

Schöne Grüße,

Roman

PS: mit dem Code einfügen habe ich es ja, die Struktur geht immer hops

Antworten
Christian
  • Forum-Beiträge: 307

01.01.2013, 19:02:36 via Website

Hi Roman,

vielleicht liegt es noch an den Auswirkungen von Silvester aber ich versteht irgendwie nicht was du machen möchtest.
Wenn du du auf die SD-Card zu greifen möchtest warum gehst du dann nicht über die Klasse Environment.(getExternalStorageDirectory())

Ich versteh nicht ganz den Sinn deines Code Ausschnittes.
Vielleicht könntest du das Ganze ein wenig näher erklären,t auch was du vor hast bzw warum. Vielleicht gibt es ja auch einen einfachen Weg.

Mfg Christian

P.s. Happy New Year an alle :)

Antworten
Roman
  • Forum-Beiträge: 20

01.01.2013, 20:12:56 via Website

Hallo Christian und prosit Neujahr,

ähnlich wie bei Einträgen der Kontakte im Telefonbuch, wo man wählen kann, ob auf SIM oder Telefon gespeichert wird, möchte ich die Möglichkeit geben zwischen Telefon und SD-Karte zu wählen.

Mittels getExternalStorageDirectory() erhalte ich ja nur einen Pfad. Das wäre bei eingelegter SD-Card die SD-Card. Ist jedoch keine SD-Card eingelegt, zeigt der Pfad auf den internen Speicher. Der Sinn meines geposteten Code-Schnipsels besteht darin, die zur Verfügung stehenden Pfade der gemounteten Geräte zu ermitteln, die als Laufwerk dienen.

Mein Problem ist, das nicht unterscheiden kann, ob ein Laufwerk nun im internen Speicher liegt oder auf der SD-Card.

In der c't wird generell die mangelhafte Anbindung von externem Speicher unter Android angesprochen, bei der jeder Hersteller seinen eigenen Weg geht. Ein Teil des Artikels geht dann auf die Entwicklung ein und berichtet, dass bei den getesten Smartphones steths das zweite gemountete Gerät die SD-Card sei. Beim Huawei ist dies ja nun das erste Gerät, so dass man sich auf die Reihenfolge der gefundenen Geräte nicht stützen kann.

Schöne Grüße,

Roman

Antworten