2013-03-15 19 views
11

Mam wiele urządzeń z Androidem różnych dostawców.Niektóre urządzenia z Androidem traktują pamięć wewnętrzną jako karty SD i pamięć zewnętrzną jako EXTSD

Niektóre z nich zamocować/mnt/sdcard do pamięci wewnętrznej i/mnt/extsd do zewnętrznej pamięci (scenariusz 1) i inne dołączyć/mnt/sdcard 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 pozwoleniem WRITE_EXTERNAL_STORAGE!

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, aby móc napisać do folderu extsd?

+1

To moja lepiej byłoby zadać pytanie do tej społeczności : https://android.stackexchange.com/ – noraj

Odpowiedz

0

Jedyne obejście znalazłem tak daleko, aby uzyskać dostęp do zapisu na urządzeniu jest zakorzenienia urządzenie :(

Samsung zapewnia pracę wokół z oczywistym wejściem

Więcej szczegółów można znaleźć w Poniższe linki

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:

Wydaje się, że Google ma błąd w kodzie AOSP który był wprowadzony wokół Androida 3.2, który wpływa na system operacyjny obsługuje USB przechowywanie i może uniemożliwić dostęp do zapisu kart SD i Pamięci USB. XDA Elite Uznany Developer Senior Moderator i News Writer Chainfire podsumowuje tę kwestię w swoim blogu:

„W przeszłości, aplikacja będzie zwrócić się do«WRITE_EXTERNAL_STORAGE» pozwolenie, które dawałyby dostęp do zapisu wszystkich zewnętrzne magazyny (użytkownik/grupa "sdcard_rw"). Zostało to najwyraźniej zmienione na tylko przyznać dostęp do zapisu do głównej pamięci zewnętrznej.Wprowadzono drugie uprawnienie 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 otrzyma takiego pozwolenia na , tylko aplikacje systemowe i aplikacje dostarczane przez producenta urządzenia zwykle będą miały takie zezwolenie. Istnieje wyjątki, widocznie na niektórych urządzeniach aplikacje innych producentów będą udzielonych to uprawnienie, ale według źródeł AOSP, oni na pewno nie ma.”

+0

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

4
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 koncepcji "zewnętrznego SD" poza pamięcią zewnętrzną, jak opisano powyżej.

Jeśli producent urządzenia wybrał pamięć zewnętrzną jako wbudowaną lampę błyskową i ma również kartę SD, musisz skontaktować się z tym producentem, aby ustalić, czy możesz użyć karty SD (nie jest ona gwarantowana) i zasady służą do korzystania z niego, na przykład jaką ścieżkę użyć.

4

Na zakorzenione urządzenia, można zmienić Twój /system/etc/permissions/platform.xml „naprawić” ten problem uprawnienia następujące pracował dla mnie.

  • adb ściągania /system/etc/permissions/platform.xml
  • Modyfikuj platformy. xml tak, że media_rw jest zawarte w WRITE_EXTE RNAL_STORAGE pozwolenie tak:

    <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

  • Device Restart
+0

Dzięki, zrobiłem to dla mnie. Nie rozumiem, dlaczego Google wymusiłby takie ograniczenia uprawnień. – ebernie

+2

To rozwiązanie użytkownika, a nie rozwiązanie dla programistów. – aleb