Pytanie Niektóre urządzenia z systemem Android traktują pamięć wewnętrzną jako karty SD i pamięć zewnętrzną jako EXTSD


Mam kilka urządzeń z Androidem od różnych dostawców.

Niektóre z nich dołączają / mnt / sdcard do pamięci wewnętrznej i / mnt / extsd do   pamięć zewnętrzna (scenariusz 1) i inne pliki / mnt / sdcard do pamięci zewnętrznej (scenariusz 2)

Myślę, że drugi scenariusz jest standardowy, ponieważ interfejs API systemu Android zapewnia uchwyt do tej ścieżki. Problem polega na tym, że w scenariuszu 1 /mnt/extsd staje się readonly nawet z WRITE_EXTERNAL_STORAGE pozwolenie!

Oznacza to, że mogę tylko odczytać dane z rzeczywistej zewnętrznej karty SD i nie mogę do niej pisać. 

Czy istnieje obejście tego problemu, abym mógł napisać do folderu extsd?


11
2018-03-15 05:42


pochodzenie


Najlepiej byłoby zadać to pytanie tej społeczności: android.stackexchange.com - noraj


Odpowiedzi:


Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"

Environment.getExternalStorageDirectory() odnosi się do tego, co producent urządzenia uważał za "pamięć zewnętrzną". Na niektórych urządzeniach jest to nośnik wymienny, na przykład karta SD. Na niektórych urządzeniach jest to część flashu na urządzeniu. W tym przypadku "pamięć zewnętrzna" oznacza "rzeczy dostępne przez tryb pamięci masowej USB po podłączeniu do komputera hosta", przynajmniej dla systemu Android 2.x i nowszych.

But the question is about external SD. How to get a path like "/mnt/sdcard/external_sd" (it may differ from device to device)?

Android nie ma pojęcia "zewnętrznego SD" poza pamięcią zewnętrzną, jak opisano powyżej.

Jeśli producent urządzenia wybrał pamięć zewnętrzną jako wbudowany flesz i ma kartę SD, musisz skontaktować się z tym producentem, aby ustalić, czy możesz użyć karty SD (nie jest ona gwarantowana) i jakie są zasady dotyczące używając go, na przykład jakiej ścieżki do niego użyć.


4
2018-03-15 07:02





Na urządzeniu zrootowanym można zmienić plik /system/etc/permissions/platform.xml, aby "naprawić" problem z uprawnieniami. Dla mnie:

  • adb pull /system/etc/permissions/platform.xml
  • Zmodyfikuj platform.xml tak, aby media_rw znajdowało się w uprawnieniu WRITE_EXTERNAL_STORAGE w następujący sposób:

    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
       <group gid="sdcard_rw" />
       <group gid="media_rw" />
    </permission>
    
  • adb push platform.xml /system/etc/permissions/platform.xml

  • Uruchom ponownie urządzenie

4
2018-05-09 21:23



Dzięki, zrobiłem to dla mnie. Nie rozumiem, dlaczego Google wymusiłby takie ograniczenia uprawnień. - ebernie
Jest to rozwiązanie użytkownika, a nie rozwiązanie programistyczne. - aleb


Jedyną pracą, jaką udało mi się znaleźć, aby uzyskać dostęp do zapisu na urządzeniu, jest rootowanie urządzenia :(

Samsung zapewnia pracę z manifestem

Więcej szczegółów można znaleźć w poniższych odsyłaczach

http://www.xda-developers.com/android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/

i

http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/

Fragmenty:

Wygląda na to, że Google ma błąd w swoim kodzie AOSP   wprowadzono w systemie Android 3.2, co ma wpływ na sposób, w jaki system operacyjny obsługuje USB   Przechowywanie i może uniemożliwić dostęp do zapisu na kartach SD i pamięciach USB. XDA   Elite Recognised Developer, Senior Moderator i News Writer   Chainfire podsumowuje ten problem w swoim blogu:

"W przeszłości aplikacja żądała" WRITE_EXTERNAL_STORAGE "   uprawnienia, które zapewniłyby dostęp do zapisu do wszystkich zewnętrznych magazynów   (użytkownik / grupa "sdcard_rw"). To najwyraźniej zostało zmienione tylko na   nadaj prawo do zapisu do głównej pamięci zewnętrznej. Sekunda   pozwolenie zostało wprowadzone o nazwie "WRITE_MEDIA_STORAGE", które   przyznałoby dostęp do innych zewnętrznych magazynów (użytkownik / grupa   "Media_rw").

Problem polega na tym, że strona trzecia nie zostanie faktycznie przyznana   uprawnienia, tylko aplikacje systemowe i aplikacje udostępniane przez urządzenie   producent zwykle otrzyma to pozwolenie. Tam są   wyjątki, najwyraźniej na niektórych urządzeniach będą aplikacje innych firm   udzielili tego pozwolenia, ale według źródeł AOSP są   z pewnością nie powinno. "


0
2018-03-19 07:07



Na zrootowanym urządzeniu, jak by to naprawić? Na przykład, Cubieboard jest domyślnie zrootowany, wewnętrzna karta SD jest bardzo mała, ale aplikacje nie mogą domyślnie zapisywać danych zewnętrznych - TimothyP