Zugriff auf die "echte" SD-Karte ?

  • Antworten:46
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 17

16.01.2013 10:05:55 via App

te ist threadersteller. also du.
bei samsung geräten ist die echte speicherkarte als extSdCard drin. der interne speicher wird als sdcard angezeigt. weiß ja nicht ob dir das hilft.
Gruß
  • Forum-Beiträge: 17

16.01.2013 10:08:51 via Website

Eluga f.
man kann alle Daten auf die extsd laden. eventuell Pfad angeben.

ja, genau das will ich! woher bekommt die App "dynamisch" den Pfad zur Karte (auf verschiedenen Geräten) ?

— geändert am 16.01.2013 10:17:06

Gelöschter Account
  • Forum-Beiträge: 1.008

16.01.2013 10:20:56 via App

das weiss ich noch nicht genau.

technik ist geil.

Gelöschter Account
  • Forum-Beiträge: 694

16.01.2013 11:48:06 via Website

Ich hoffe ich habe in dem Wust hier die Frage richtig verstanden.

Status der SD-Karte:

1public static boolean isSDCardWriteable() {
2 boolean rc = false;
3
4 String state = Environment.getExternalStorageState();
5 if (Environment.MEDIA_MOUNTED.equals(state)) {
6 rc = true;
7 }
8
9 return rc;
10 }

Das Verzeichnis selbst liefert halt das:

1Environment.getExternalStorageDirectory()

— geändert am 16.01.2013 11:54:23

  • Forum-Beiträge: 307

16.01.2013 11:54:15 via Website

Hi,

als Erweiterung von Harald seinem Post, hab ich mal ein kleines Programm geschrieben was den Umgang zeigt.

Code findet sich auf GitHubGist.


mfg Christian
Gelöschter Account
  • Forum-Beiträge: 694

16.01.2013 12:00:19 via Website

Ich finde es ja ganz nett das Du meine Posts immer häufiger "erweiterst" aber es hilft IMHO angehenden Entwicklern nicht wenn man ihnen alles mundgerecht serviert. Eigentlich ging mein Post schon zu weit ...

— geändert am 16.01.2013 12:00:50

  • Forum-Beiträge: 17

16.01.2013 12:24:54 via Website

@Harald
dieser Code zeigt mir die nicht removable SD-Karte des Gerätes an...

@Christian
das werd ich mal ausprobieren...

(bin ja echt begeistert über diese Resonanz von euch :grin:)
  • Forum-Beiträge: 307

16.01.2013 12:37:50 via Website

@Harald

Ich finde es ja ganz nett das Du meine Posts immer häufiger "erweiterst" aber es hilft IMHO angehenden Entwicklern nicht wenn man ihnen alles mundgerecht serviert. Eigentlich ging mein Post schon zu weit ...

Das mit den "Erweiterungen" ist reiner Zufall sollte es dich aber stören tut es mir leid das war nicht meine Absicht. Sry.

Zwecks des Beispiels:
Ich glaube das gerade an Anfang manchmal ein einfaches Beispiel mehr sagt als jede Erklärung bzw. Code Fragment.
Und um ganz ehrlich zu sein mein Code ist jetzt nicht wirklich ein Highlight sowas findet man in der regel in jedem Buch bzw. Android Zeitung.
Was ich gemacht habe ist das ganze ein bisschen zusammen zu fassen und ein paar Kommentare dazu zu schreiben.

mfg Christian
  • Forum-Beiträge: 17

16.01.2013 14:05:33 via Website

auch Chritians Code bringt mich zur "internen" Speicherkarte...

hier mal meinen Code für eine Geräteabfrage, viell mach ich was falsch...
1public class SDKarte extends Activity {
2
3 public TextView textView_intern;
4 public TextView textView_internWert;
5 public File file_intern;
6 public String int_root_str;
7 public TextView textView_extern;
8 public TextView textView_externWert;
9 public File file_extern;
10 public String ext_root_str;
11 public TextView textView_removable;
12 public Boolean ext_removableBool;
13 public String ext_removableWert;
14 public TextView textView_ext_removable;
15 public TextView textView_ext_state;
16 public String ext_stateWert;
17 public TextView textView_ext_stateWert;
18 public TextView textView_zugriff;
19 public TextView textView_zugriffWert;
20
21 @Override
22 protected void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24 setContentView(R.layout.activity_sdkarte);
25
26 textView_intern = (TextView) findViewById(R.id.textView_intern);
27 int_root_str = Environment.getRootDirectory ().toString();
28 textView_internWert = (TextView) findViewById(R.id.textView_internWert);
29 textView_internWert.setText(int_root_str);
30
31 textView_extern = (TextView) findViewById(R.id.textView_extern);
32 ext_root_str = Environment.getExternalStorageDirectory ().toString();
33 textView_externWert = (TextView) findViewById(R.id.textView_externWert);
34 textView_externWert.setText(ext_root_str);
35
36 textView_removable = (TextView) findViewById(R.id.textView_removable);
37 ext_removableBool = (Environment.isExternalStorageRemovable ());
38 textView_ext_removable = (TextView) findViewById(R.id.textView_ext_removable);
39 textView_ext_removable.setText(ext_removableBool.toString());
40
41 textView_ext_state = (TextView) findViewById(R.id.textView_ext_state);
42 textView_ext_stateWert = (TextView) findViewById(R.id.textView_ext_stateWert);
43 textView_ext_stateWert.setText( Environment.getExternalStorageState ());
44
45 textView_zugriff = (TextView) findViewById(R.id.textView_zugriff);
46 final String state = Environment.getExternalStorageState();
47 final boolean canRead;
48 final boolean canWrite;
49 if (Environment.MEDIA_MOUNTED.equals(state)) {
50 // lesen und schreiben möglich
51 canRead = true;
52 canWrite = true;
53 } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
54 // lesen möglich, schreiben nicht möglich
55 canRead = true;
56 canWrite = false;
57 } else {
58 // lesen und schreiben nicht möglich
59 canRead = false;
60 canWrite = false;
61 }
62 textView_zugriffWert = (TextView) findViewById(R.id.textView_zugriffWert);
63 textView_zugriffWert.setText("Lesen ist" + (canRead ? "" : " nicht") + " möglich. Schreiben ist" + (canWrite ? "" : " nicht") + " möglich");
64 }
65}
Gelöschter Account
  • Forum-Beiträge: 694

16.01.2013 14:40:53 via Website

auch Chritians Code bringt mich zur "internen" Speicherkarte..

Blöde Frage: Hat das betreffende Gerät eine externe Speicherkarte? Schick doch mal einen Screenshot von Deinen Android Einstellungen (Speicher).

Ansonsten greift bei Deinem Gerät wohl folgende System-Einschränkung:

It's possible that a device using a partition of the internal storage for the external storage may also offer an SD card slot. In this case, the SD card is not part of the external storage and your app cannot access it (the extra storage is intended only for user-provided media that the system scans).
  • Forum-Beiträge: 307

16.01.2013 14:50:24 via Website

Hi,

mmhh am Code liegt es nicht das Problem ist eher Samsung:


I've found that phones, like the Galaxy phones from Samsung, have /mnt/sdcard point to internal memory and not the external SD card as expected.

You can know if the path returned by Environment.getExternalStorageDirectory() is actually the external SD card with a call to Environment.isExternalStorageRemovable()

Just wanted to add from the docs for getExternalStorageDirectory() this important note:

Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.
Quelle: von brianestey auf StackOverlow

Laut einem Kommentar soll der Pfad für den externen Speicher "/mnt/sdcard/external_sd" heißen.

mfg Christian
Gelöschter Account
  • Forum-Beiträge: 1.008

16.01.2013 18:20:50 via App

©h®is
Eluga f.
das weiss ich noch nicht genau.
ach nee:grin:

kicher, kicher, man kann ja nicht alles wissen. Samsung macht mir immer Kopfschmerzen xD.

— geändert am 16.01.2013 18:23:40

technik ist geil.

  • Forum-Beiträge: 17

17.01.2013 10:31:55 via Website

echt blöd, jeder Hersteller kocht da sein eigenes Süppchen...

würde gern 3 Screenshots veröffentlichen, (darf ich hier noch nicht)
die zeigen:
externe SD-Karte ist vorhanden, im Dateimanager heißt sie extSdCard
aber die Abfrage des ExternalStorageDirectory bringt mich zur vom Gerätespeicher abgezwackten internen sdcard0

ich bin am verzweifeln...

zu sehen unter
www.delta-media-factory.de/android
Gelöschter Account
  • Forum-Beiträge: 694

17.01.2013 10:39:11 via Website

Hast Du die Antworten in diesem Thread gelesen und verstanden?

Hier nochmals das Zitat aus den Android Dokus zum Thema Storage. Dort steht das schwarz auf weiß. Es ist also kein Hersteller-Süppchen sondern von Android als System vorgesehen. Samsung scheint wohl der einzige zu sein der das genau so macht.

It's possible that a device using a partition of the internal storage for the external storage may also offer an SD card slot. In this case, the SD card is not part of the external storage and your app cannot access it (the extra storage is intended only for user-provided media that the system scans).

Was liefern diese Befehle bei Dir als Ergebnis:

1Environment.isExternalStorageRemovable()
2Environment.isExternalStorageEmulated()
  • Forum-Beiträge: 17

18.01.2013 08:22:37 via Website

gelesen und verstanden, aber JEDES "System" hat doch ein Schlupfloch...
wollte ja nur zeigen, dass die SD-Karte angezeigt wird, und sie vom System ansprechbar ist, also gibt es auch die echte "Adresse" der Karte
auch wenn Android keiner App direkt erlaubt (wohl aus Sicherheitgründen) auf sie zuzugreifen

und das mit den Süppchen ist so gemeint, dass die gemounteten SD-Karten bei unterschiedlichen Herstellern unterschiedlich heißen

nich gleich schimpfen, wußte vor zwei Monaten nur, das Android wohl ein Betriebsystem für Smartphones ist :wacko:
Gelöschter Account
  • Forum-Beiträge: 694

18.01.2013 18:19:04 via Website

Damit weiß man das die "ExternalStorage" nur emuliert ist und nicht entnommen werden kann - also eben nicht extern ist.

Prima. Das ist genau das Pattern das Du benötigst um Deine Frage zu beantworten und meine Neugierde zu befriedigen.

Danke.