Zugriff auf die "echte" SD-Karte ?

  • Antworten:46
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 08:47:50 via Website

Hi Leute,
ich möchte in meiner App auf die echte SD-Karte zugreifen, kriegs aber nicht hin
über (getExternalStorageDirectory) bekomm ich die nicht removable... (Gerätespeicher)

in vielen Threads wird von dem Verzeichnis \mnt gesprochen,
dort könnte man doch abfragen, ob der Speicher removable ist, und wenn ja, hat man den Pfad, oder?
leider finde ich das Verzeichnis nicht :-(

könnt ihr mir da weiterhelfen?

Gruß Tom

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

16.01.2013, 08:51:19 via App

ich werde dir dabei helfen.
also, du musst in einstellungen >speicher , und dann auswählen, worin deine Daten abgespeichert werden sollen.

— geändert am 16.01.2013, 08:52:01

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 08:58:50 via Website

genau das geht eben nich, das is nix zum Auswählen...
da kann ich die Karte nur entfernen oder formatieren ...

— geändert am 16.01.2013, 09:04:50

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

16.01.2013, 09:04:54 via App

Tom Peach
genau das geht eben nich, das is nix zum Auswählen...
im speicherverzeichnis befindet sich das Wort "standardschreibdatenträger". (bei mir ist das so)

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 09:06:20 via Website

hab ein Galaxy S3, da steht sowas nich :-(

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

16.01.2013, 09:10:33 via App

was siehst du dann in einstellungen,
etwa nur mount oder unmount?

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 09:17:17 via Website

(Environment.getExternalStorageState) zeigt mounted...

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

16.01.2013, 09:20:36 via App

bei meinem cynus t2 ist alles klar und deutlich. es gibt zu diesem Problem bestimmt mehrere threads. ich kann mal schauen, ob ich da was finde.

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 09:28:05 via Website

heikles Thema, hab einen CT-Bericht gelesen,
wonach alle Hersteller unterschiedlich mounten,
der Zugriff soll aber auf allen Geräten funzen.

theoretischer Ansatz von mir:
Verzeichnis \mnt finden, auslesen und jeden Eintrag abfragen, ob removable oder nicht,
wenn removable - bingo - ...

oder?

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

16.01.2013, 09:29:44 via App

probier es mal mit appmonster pro aus.

technik ist geil.

Antworten
©h®is
  • Forum-Beiträge: 24.262

16.01.2013, 09:32:33 via Website

Eluga f.
probier es mal mit appmonster pro aus.
du bist hier im entwickler thread..

der TE möchte zugriff über seine app haben..B)

StayDirty ツ


Pixel 3a XL [10]

Samsung Tab A 10.5 2018 [9]

⇨Dirty⇦nexus5x [8.1.0]

⇨Dirty⇦ nexus4 [5.0.2] RIP

⇨Dirty⇦ nexus7 (Flo) [6.0.1] RIP

⇨CodefireX⇦desire hd [4.2.2] RIP

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

16.01.2013, 09:39:04 via App

appmoster pro sollte dazu in der Lage sein, habe momentan wenig Zeit irgendetwas großartiges zu unternehmen.
man kann zwar Daten hin und her verschieben, aber leider ist der Zugriff auf die Sd Karte so was von..! (ich arbeite mit meinem cynus t2, habe leider kein galaxy s3)

technik ist geil.

Antworten
©h®is
  • Forum-Beiträge: 24.262

16.01.2013, 09:41:19 via Website

du kapierst es nicht?

der TE entwickelt eine app und möchte mit dieser zugriff haben..:what:

was soll ihm da appmonster helfen?:wacko:

— geändert am 16.01.2013, 09:43:03

StayDirty ツ


Pixel 3a XL [10]

Samsung Tab A 10.5 2018 [9]

⇨Dirty⇦nexus5x [8.1.0]

⇨Dirty⇦ nexus4 [5.0.2] RIP

⇨Dirty⇦ nexus7 (Flo) [6.0.1] RIP

⇨CodefireX⇦desire hd [4.2.2] RIP

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

16.01.2013, 09:44:12 via App

Zugriff über seine app?
ach so, habe wohl falsch verstanden.
das geht so: es Explorer öffnen und Option Telefon auswählen.
dann mnt suchen und nach Programm schauen
in mnt müsste sich sd1 (internal) und
sd2 (external) befinden ( bei jedem Handy heißt es bisschen anders)

— geändert am 16.01.2013, 09:49:23

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 09:44:57 via Website

hab ich, aber da lassen sich doch nur die Apps auf die Karte verschieben, oder?

zur Erklärung:
hab eine App geschrieben, die veröffentlicht werden soll, und somit auf verschiedenen Geräten laufen muß,
in dieser App schiesst der User ein Foto, das auf der echten SD-Karte gespeichert werden soll.
leider erreiche ich nur die gefakte SD-Karte des internen Speichers...

Antworten
©h®is
  • Forum-Beiträge: 24.262

16.01.2013, 09:52:17 via Website

ich habe dich schon verstanden

warte mal ab, da wird sich bestimmt ein dev finden, der das weiss..

StayDirty ツ


Pixel 3a XL [10]

Samsung Tab A 10.5 2018 [9]

⇨Dirty⇦nexus5x [8.1.0]

⇨Dirty⇦ nexus4 [5.0.2] RIP

⇨Dirty⇦ nexus7 (Flo) [6.0.1] RIP

⇨CodefireX⇦desire hd [4.2.2] RIP

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

16.01.2013, 09:53:22 via App

Tom Peach
hab ich, aber da lassen sich doch nur die Apps auf die Karte verschieben, oder?

zur Erklärung:
hab eine App geschrieben, die veröffentlicht werden soll, und somit auf verschiedenen Geräten laufen muß,
in dieser App schiesst der User ein Foto, das auf der echten SD-Karte gespeichert werden soll.
leider erreiche ich nur die gefakte SD-Karte des internen Speichers...

aha, die app soll also aufgenommene fotos in die echte sd Karte schieben.
hast du vielleicht etwas beim entwickeln ausgelassen?

technik ist geil.

Antworten
Tom Peach
  • Forum-Beiträge: 17

16.01.2013, 09:56:32 via Website

was denn? hab doch den Pfad zur Karte nicht :-(

*bin ich ein TE? was ist ein TE?* :mellow:

— geändert am 16.01.2013, 10:00:28

Antworten
©h®is
  • Forum-Beiträge: 24.262

16.01.2013, 10:04:12 via Website

TE = Thread Ersteller :smug:

vergiss die "anderen" posts einfach, die sind alle am thema vorbei..:wink:

— geändert am 16.01.2013, 10:04:58

StayDirty ツ


Pixel 3a XL [10]

Samsung Tab A 10.5 2018 [9]

⇨Dirty⇦nexus5x [8.1.0]

⇨Dirty⇦ nexus4 [5.0.2] RIP

⇨Dirty⇦ nexus7 (Flo) [6.0.1] RIP

⇨CodefireX⇦desire hd [4.2.2] RIP

San Blarnoi

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

16.01.2013, 10:04:36 via App

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

technik ist geil.

Antworten
Michel Rojahn
  • 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ß

Antworten
Tom Peach
  • 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

Antworten
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.

Antworten
©h®is
  • Forum-Beiträge: 24.262

16.01.2013, 10:25:46 via Website

Eluga f.
das weiss ich noch nicht genau.
ach nee:grin:

StayDirty ツ


Pixel 3a XL [10]

Samsung Tab A 10.5 2018 [9]

⇨Dirty⇦nexus5x [8.1.0]

⇨Dirty⇦ nexus4 [5.0.2] RIP

⇨Dirty⇦ nexus7 (Flo) [6.0.1] RIP

⇨CodefireX⇦desire hd [4.2.2] RIP

San Blarnoi

Antworten
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

©h®is

Antworten
Christian
  • 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

©h®is

Antworten
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

Antworten
Tom Peach
  • 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:)

Antworten
Christian
  • 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

Antworten
Tom Peach
  • 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}

Antworten
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).

Antworten
Christian
  • 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

Antworten
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.

Antworten
Tom Peach
  • 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

Antworten
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()

Antworten
Tom Peach
  • 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:

Antworten
Tom Peach
  • Forum-Beiträge: 17

18.01.2013, 17:26:32 via Website

removable = false
emulated = true

Antworten
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.

Antworten
Tom Peach
  • Forum-Beiträge: 17

19.01.2013, 10:34:14 via Website

ich sag doch, da gibt's ein Weg, hab's zwar noch nicht ausprobiert, hört sich aber gut an...

https://github.com/jow-ct/Environment2

Environment2/open/src/de/jockels/open/Enviroment2.java Zeile 59 ff B)

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

19.01.2013, 11:34:28 via Website

Das wäre mir persönlich zu viel Gefrickel.

Ich würde mich eher auf die drei notwendigen und offiziellen Android Methoden und deren Interpretation verlassen - die machen es auf jeden Fall richtig. Hier gibt es den Code zur Environment Klasse. Guck mal zum Beispiel in die isExternalStorageEmulated Methode. Die nutzen den MountService. Wenn der es nicht weiß ...

So ist der korrekte Ablauf:

* API kleiner 9 --> Environment.getExternalStorageState verwenden und interpretieren.

* API kleiner 11 --> Environment.isExternalStorageRemovable sowie Environment.getExternalStorageState verwenden und interpretieren.

* API größer 10 --> Environment.isExternalStorageEmulated sowie Environment.isExternalStorageRemovable sowie Environment.getExternalStorageState verwenden und interpretieren.

Das ist eine einfache Matrix die im Grunde genommen in Deinem Fall nur erfordert das Environment.isExternalStorageEmulated==false, Environment.isExternalStorageRemovable==true ist und den Status Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))==true besitzt. Hier ein Beispiel für Deinen Fall, ist blind aus dem Ärmel geschüttelt, wenn Du Fehler findest darfst Du sie behalten:

1boolean emulated = false;
2boolean removable = true;
3boolean mounted = false;
4
5if (Build.VERSION.SDK_INT >= 9) {
6emulated = Environment.isExternalStorageEmulated();
7}
8
9if (Build.VERSION.SDK_INT >= 11) {
10removable = Environment.isExternalStorageRemovable();
11}
12
13mounted = (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))) ? true : false;
14
15if (removable && mounted && !emulated) {
16// jetzt Du
17}

Antworten
Tom Peach
  • Forum-Beiträge: 17

19.01.2013, 12:36:59 via Website

ja, das ist es ja, diese Abfrage ergibt auf meinem Samsung removable = false und emulated = true
obwohl eine echte SD-Karte drin ist (die ja removable = true und emulated = false wär?)

werde mir mal deinen Link reinziehen, sieht gut aus, danke

— geändert am 19.01.2013, 12:42:08

Antworten
Tom Peach
  • Forum-Beiträge: 17

20.01.2013, 09:12:11 via Website

meine "Übersetzung" : deine App kann nicht auf die extKarte zugreifen, weil sie nicht Teil des external storage ist.
sie ist nur für eigene Mediadaten, die das System benutzt, gedacht.. ?

meinst du dieser Weg wäre eine Alternative?
https://github.com/jow-ct/Environment2

langsam überfordert mich das alles :grin:

Antworten
Tom Peach
  • Forum-Beiträge: 17

22.01.2013, 14:57:37 via Website

Hab's jetzt kapiert :wacko:

>>Bis Android 4.1 gibt es keinen offiziellen Weg, drauf zuzugreifen. Daher liegt bei diesen Smartphones die SD-Karte für Apps weitgehend brach<<

Meine App läuft aber auf 4.0 :O

hab aber ne Menge dazugelernt, danke!

Antworten