写入SD卡

问题描述:

我正在写一些文件到SD卡。我的android版本是2.1。我没有在清单文件中设置任何权限,但它允许我写入SD卡。写入SD卡

请让我知道为什么会有这种行为。清单控制中只有WRITE_EXTERNAL_STORAGE写入SD卡或我需要执行的任何其他配置。

感谢 Gururaja B○

你与API级别3或更低编制?该权限已添加到API级别4(Android 1.6)中,因此所有使用API​​级别3(与仍然运行1.5的手机兼容)编译的应用程序都将自动获得该权限。

+0

我使用Eclair代码库来构建系统映像,它的API级别大于3.是否需要修改除检查API级别之外的任何其他配置? – 2010-07-08 08:52:05

我已经创建了一个utils方法来检查设备上是否有可用的SD卡,并在设备上获取SD卡路径(如果有)。

您可以将2个方法的波纹管复制到您需要的项目类中。在返回的路径上创建项目的文件夹并在其上写入数据。就这样。

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; 
}