2010-07-08 7 views
5

Ich schreibe einige Dateien auf SD-Karte. Meine Android-Version ist 2.1. Ich setze keine Erlaubnis in der Manifest-Datei, aber es erlaubt mir, auf SD-Karte zu schreiben.Schreiben auf SD-Karte

Bitte lassen Sie mich wissen, warum dieses Verhalten. Nur WRITE_EXTERNAL_STORAGE in den Manifeststeuerungen schreibe auf die SD-Karte oder irgendeine andere Konfiguration, die ich tun muss.

dank Gururaja B O

Antwort

2

Stehen Sie mit API-Ebene 3 oder weniger Kompilieren? Diese Berechtigung wurde in API-Ebene 4 (Android 1.6) hinzugefügt, sodass alle Apps, die mit API-Ebene 3 kompiliert wurden (für Kompatibilität mit Telefonen, auf denen noch 1.5 ausgeführt wird), diese Berechtigung automatisch erhalten.

+0

Ich benutze Eclair Code-Basis, um die Systembilder zu erstellen, die API-Ebene größer als 3 hat. Ob ich andere Konfiguration abgesehen von API-Ebene überprüfen muss? –

0

Ich habe eine utils-Methode erstellt, um zu überprüfen, ob eine SD-Karte auf dem Gerät verfügbar ist oder nicht, und bekomme den SD-Kartenpfad auf dem Gerät, wenn es verfügbar ist.

Sie können 2 Methoden nach unten in Ihre Projektklasse kopieren, die Sie benötigen. Erstellen Sie den Ordner Ihres Projekts in dem zurückgegebenen Pfad, und schreiben Sie Daten darauf. Das ist alles.

public String isRemovableSDCardAvailable() { 
    final String FLAG = "mnt"; 
    final String SECONDARY_STORAGE = System.getenv("SECONDARY_STORAGE"); 
    final String EXTERNAL_STORAGE_DOCOMO = System.getenv("EXTERNAL_STORAGE_DOCOMO"); 
    final String EXTERNAL_SDCARD_STORAGE = System.getenv("EXTERNAL_SDCARD_STORAGE"); 
    final String EXTERNAL_SD_STORAGE = System.getenv("EXTERNAL_SD_STORAGE"); 
    final String EXTERNAL_STORAGE = System.getenv("EXTERNAL_STORAGE"); 

    Map<Integer, String> listEnvironmentVariableStoreSDCardRootDirectory = new HashMap<Integer, String>(); 
    listEnvironmentVariableStoreSDCardRootDirectory.put(0, SECONDARY_STORAGE); 
    listEnvironmentVariableStoreSDCardRootDirectory.put(1, EXTERNAL_STORAGE_DOCOMO); 
    listEnvironmentVariableStoreSDCardRootDirectory.put(2, EXTERNAL_SDCARD_STORAGE); 
    listEnvironmentVariableStoreSDCardRootDirectory.put(3, EXTERNAL_SD_STORAGE); 
    listEnvironmentVariableStoreSDCardRootDirectory.put(4, EXTERNAL_STORAGE); 

    File externalStorageList[] = null; 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
     externalStorageList = getContext().getExternalFilesDirs(null); 
    } 
    String directory = null; 
    int size = listEnvironmentVariableStoreSDCardRootDirectory.size(); 
    for (int i = 0; i < size; i++) { 
     if (externalStorageList != null && externalStorageList.length > 1 && externalStorageList[1] != null) 
      directory = externalStorageList[1].getAbsolutePath(); 
     else 
      directory = listEnvironmentVariableStoreSDCardRootDirectory.get(i); 

     directory = canCreateFile(directory); 
     if (directory != null && directory.length() != 0) { 
      if (i == size - 1) { 
       if (directory.contains(FLAG)) { 
        Log.e(getClass().getSimpleName(), "SD Card's directory: " + directory); 
        return directory; 
       } else { 
        return null; 
       } 
      } 
      Log.e(getClass().getSimpleName(), "SD Card's directory: " + directory); 
      return directory; 
     } 
    } 
    return null; 
} 

/** 
* Check if can create file on given directory. Use this enclose with method 
* {@link BeginScreenFragement#isRemovableSDCardAvailable()} to check sd 
* card is available on device or not. 
* 
* @param directory 
* @return 
*/ 
public String canCreateFile(String directory) { 
    final String FILE_DIR = directory + File.separator + "hoang.txt"; 
    File tempFlie = null; 
    try { 
     tempFlie = new File(FILE_DIR); 
     FileOutputStream fos = new FileOutputStream(tempFlie); 
     fos.write(new byte[1024]); 
     fos.flush(); 
     fos.close(); 
     Log.e(getClass().getSimpleName(), "Can write file on this directory: " + FILE_DIR); 
    } catch (Exception e) { 
     Log.e(getClass().getSimpleName(), "Write file error: " + e.getMessage()); 
     return null; 
    } finally { 
     if (tempFlie != null && tempFlie.exists() && tempFlie.isFile()) { 
      // tempFlie.delete(); 
      tempFlie = null; 
     } 
    } 
    return directory; 
}