Pytanie Pisanie na kartach SD Androida, odmowa uprawnień


Próbuję napisać plik na SDCard z poniższym kodem (pozwolenie android.permission.WRITE_EXTERNAL_STORAGE już ustawione w pliku manifest.xml). Po wykonaniu nmea_file.createNewFile(); zrzuca wyjątek Permission Denied.

Jakieś domysły dlaczego tak się dzieje?

if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
  {
     Log.d(TAG, "Sdcard was not mounted !!" ); 
  }
else
  {
    File nmea_file; 
    File root = Environment.getExternalStorageDirectory();
    FileWriter nmea_writer = null;
    try {
        nmea_file = new File(root,"NMEA.txt");
        if(!nmea_file.exists()) {
                Log.w(TAG, "File Doesn't Exists!");
                nmea_file.createNewFile();
            }
        nmea_writer = new FileWriter(nmea_file);
        nmea_writer.append(nmea);
        nmea_writer.flush();
    }
    catch (IOException e) 
    {
        Log.w(TAG, "Unable to write", e);
    } 
    finally 
    {
        if (nmea_writer != null) 
        {
            try 
            {
                nmea_writer.close();
            } 
            catch (IOException e) 
            {
                Log.w(TAG, "Exception closing file", e);
            }
        }
    }
  }

17
2017-12-22 06:04


pochodzenie


opublikuj swój logcat - Falmarri
Czy używasz sharedUerId do systemu? - Neeraj Nama


Odpowiedzi:


Dodaj do pliku manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

32
2017-12-08 12:49



Mam nadzieję, że przeczytałeś to pytanie wyraźnie, powiedział, że ma już to zezwolenie w zamanifestowaniu. - nnhthuan


Może się to zdarzyć, jeśli karta SD jest zablokowana dla niektórych operacji, takich jak:

  1. Przygotowanie do odinstalowania karty SD z gniazda
  2. Urządzenie podłączone do komputera jako zewnętrzny napęd USB

20
2017-12-22 09:28



Foolishly zapomniałem, że moja karta SD również została zamontowana, dzięki za napiwek! - Dr1Ku
Urządzenie podłączone jako pamięć USB również było moim problemem, dziękuję! - Ixx


Możesz chcieć sprawdzić, czy masz dostęp do karty SDCARD. Oto, jak możesz to zrobić w kodzie:

if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
    Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show();
}

12
2018-05-28 22:09



dobra sugestia ... - Andro Selva


Należy pamiętać, że instrukcja use-sdk może wpływać na zdolność zapisu na karcie SD (!).

Mój AndroidManifest.xml miał:

<uses-sdk minSdkVersion="8"/>

I mogłem pisać na karcie SD bez żadnych problemów, nawet jeśli nie zadeklarowałem android.permission.WRITE_EXTERNAL_STORAGE.

Kiedy zmieniłem instrukcję use-sdk na:

<uses-sdk android:targetSdkVersion="9" minSdkVersion="8" />

Wszystkie moje zapisy na karcie SD nie powiodły się z odmową zgody! Przyznane, że powinno zostać zadeklarowane, że android.permission.WRITE_EXTERNAL_STORAGE, ale dlaczego z jednym użyciem-sdk instrukcja działała, a druga nie?


2
2018-04-17 17:50





Sprawdź, czy jest to sdcard zamontowane lub nie, jeśli sprawdzasz emulator. Nie zapominaj też o wielkości sdcard podczas tworzenia emulatora. Następnie musisz dodać
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
w twoim manifeście.


0
2018-02-27 12:41



Interfejs API do sprawdzania stanu mountów tutaj: developer.android.com/reference/android/os/Environment.html - uprego