Android内/外置SD卡路径获取与写入实践

3 下载量 159 浏览量 更新于2024-08-28 收藏 72KB PDF 举报
在Android开发中,管理设备的内置存储(Internal Storage)和外置SD卡(External Storage)是常见的需求,特别是在处理文件操作和用户数据存储时。本文档介绍了如何在Android应用中获取并显示内置和外置SD卡的路径,并实现数据的写入功能。以下步骤和代码将帮助开发者理解这个过程。 1. 权限管理: 在Android 6.0(API level 23)及更高版本中,为了访问外部存储,你需要请求`Manifest.permission.WRITE_EXTERNAL_STORAGE`和`Manifest.permission.READ_EXTERNAL_STORAGE`权限。在`MainActivity`类中,可以检查当前应用是否已经拥有这些权限,如果没有,需要在运行时请求。 ```java private void checkPermissions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE); } } } ``` 2. 获取路径: 使用`Environment.getExternalStorageDirectory()`获取外置SD卡的根路径,`getFilesDir()`获取内部存储的私有目录。为了兼容不同版本和设备,可以使用`StorageManager`来获取更精确的路径。 ```java public String getInternalStoragePath() { return Environment.getDataDirectory().toString(); } public String getExternalStoragePath() { StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE); String extStorageState = storageManager.getVolumeState(Environment.getExternalStorageDirectory().getPath()); if (Environment.MEDIA_MOUNTED.equals(extStorageState)) { return Environment.getExternalStorageDirectory().getPath(); } else { // 处理SD卡未挂载的情况 return null; } } ``` 3. 按钮交互与操作: 设计两个按钮,分别对应内置和外置SD卡的路径显示和数据写入。当用户点击按钮时,调用相应的路径获取方法,并在文本视图中显示结果。 ```java mBtIn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { result = "Internal Storage Path: " + getInternalStoragePath(); mTv.setText(result); } }); mBtOut.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String sdcardPath = getExternalStoragePath(); if (sdcardPath != null) { result = "External Storage Path: " + sdcardPath; mTv.setText(result); tryWriteData(sdcardPath); } else { Toast.makeText(MainActivity.this, "SD card is not mounted", Toast.LENGTH_SHORT).show(); } } }); ``` 4. 数据写入: 使用`FileOutputStream`和`OutputStream`实例将数据写入指定路径。这里仅作示例,实际应用中需要处理可能出现的异常。 ```java private void tryWriteData(String path) { File file = new File(path, "data.txt"); try { OutputStream outputStream = new FileOutputStream(file); outputStream.write("Hello, Android!".getBytes()); outputStream.close(); result += "\nData written to file: " + file.getAbsolutePath(); } catch (FileNotFoundException e) { result += "\nError: " + e.getMessage(); } catch (IOException e) { result += "\nError: " + e.getMessage(); } mTv.setText(result); } ``` 5. 总结: 本文档展示了在Android应用中获取和显示内置存储和外置SD卡路径的方法,以及如何在用户点击按钮后写入数据到这些路径。开发者需要确保处理权限请求,根据设备状态正确判断SD卡路径,并妥善处理可能出现的异常,以提供稳定的数据操作体验。