2016-11-12 4 views
0

Ich bin neu bei Android, ich habe viele Codes ausprobiert, aber kann den Weg nicht bekommen. , aber unter Verwendung von Code, ich habe den Pfad der externen SD-Karte, konnte aber nicht auf die externe Sdcard-Verzeichnis zugreifen.Externe Sd-Card Stroage

public static List<StorageInfo> getStorageList() { 

    List<StorageInfo> list = new ArrayList<StorageInfo>(); 
    String def_path = Environment.getExternalStorageDirectory().getPath(); 
    boolean def_path_internal = !Environment.isExternalStorageRemovable(); 
    String def_path_state = Environment.getExternalStorageState(); 
    boolean def_path_available = def_path_state.equals(Environment.MEDIA_MOUNTED) 
      || def_path_state.equals(Environment.MEDIA_MOUNTED_READ_ONLY); 
    boolean def_path_readonly = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY); 
    BufferedReader buf_reader = null; 
    try { 
     HashSet<String> paths = new HashSet<String>(); 
     buf_reader = new BufferedReader(new FileReader("/proc/mounts")); 
     String line; 
     int cur_display_number = 1; 
     while ((line = buf_reader.readLine()) != null) {    if (line.contains("vfat") || line.contains("/mnt")) { 
      StringTokenizer tokens = new StringTokenizer(line, " "); 
      String unused = tokens.nextToken(); //device 
      String mount_point = tokens.nextToken(); //mount point 
      if (paths.contains(mount_point)) { 
       continue; 
      } 
      unused = tokens.nextToken(); //file system 
      List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags 
      boolean readonly = flags.contains("ro"); 

      if (mount_point.equals(def_path)) { 
       paths.add(def_path); 
       list.add(0, new StorageInfo(def_path, def_path_internal, readonly, -1)); 
      } else if (line.contains("/dev/block/vold")) { 
       if (!line.contains("/mnt/secure") 
         && !line.contains("/mnt/asec") 
         && !line.contains("/mnt/obb") 
         && !line.contains("/dev/mapper") 
         && !line.contains("tmpfs")) { 
        paths.add(mount_point); 
        list.add(new StorageInfo(mount_point, false, readonly, cur_display_number++)); 
       } 
      } 
     } 
     } 

     if (!paths.contains(def_path) && def_path_available) { 
      list.add(0, new StorageInfo(def_path, def_path_internal, def_path_readonly, -1)); 
     } 

    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if (buf_reader != null) { 
      try { 
       buf_reader.close(); 
      } catch (IOException ex) {}   } 
    } 
    return list; 
} 

Wie kann ich auf das SD-Kartenverzeichnis zugreifen.

+0

Was meinst du? Was läuft schief? Sehr vages Gespräch. – greenapps

+0

Indead. Dieser Code versucht nicht einmal auf ein Verzeichnis zuzugreifen. Lass es ein SD-Kartenverzeichnis sein. Du hast recht. – greenapps

+0

Aber wenn Sie den Pfad haben, dann zeigen Sie es. – greenapps

Antwort

0

Von Android 23+ müssen Sie die Benutzerrechte erhalten, um auf den externen Speicher des Telefons zu schreiben. Tun Sie dies, indem Sie die folgende zu Ihrem Manifest:

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

Wenn dies nicht geben Sie auf die SD-Karte zugreifen, dann müssen Sie möglicherweise für die Erlaubnis zur Laufzeit fragen, bevor Sie versuchen, die Karte zugreifen. Hier ein Beispiel:

public void checkPermissions() { 
    String[] tmp = {"WRITE_EXTERNAL_STORAGE"}; 
    for (String s : tmp) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (!hasPermissionInManifest(getBaseContext(), s)) { 
       if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) 
         != PackageManager.PERMISSION_GRANTED) { 
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
       } 
      } 
     } 
    } 
} 

Sie Berechtigungen benötigen andere Sensoren für den Zugriff auf im Telefon und Kamera, die auf ähnliche Art und Weise durchgeführt werden kann. Sie können den Pfad zum externen Speicher folgendermaßen erhalten:

Environment.getExternalStorageDirectory().toString();