Android 写入SD卡

Android 写入SD卡,android,android-sdcard,Android,Android Sdcard,我想在我的Android手机中写入物理SD卡 这是我的代码: File sdCard = Environment.getExternalStorageDirectory(); String state = Environment.getExternalStorageState(); //shows mounted boolean removable = Environment.isExternalStorageRemovable(); //shows false 我知道

我想在我的Android手机中写入物理SD卡

这是我的代码:

    File sdCard = Environment.getExternalStorageDirectory();
    String state = Environment.getExternalStorageState(); //shows mounted
    boolean removable = Environment.isExternalStorageRemovable(); //shows false
我知道
getExternalStorageDirectory()
中的外部不一定意味着SD卡。当我将文件写入SD卡对象时,它会在内部(即内置)存储器中结束,而不是在SD卡上

在我的手机上,我有多个将数据写入SD卡的应用程序,例如文件浏览器。他们是怎么做到的?我想强制写入SD卡,不管制造商认为是内部/外部的

注意:外部存储器上的文件并不总是可访问的,因为用户可以将外部存储器装载到计算机上用作存储设备。因此,如果您需要存储对应用程序功能至关重要的文件,则应将其存储在内部存储器中


请求外部存储权限

要写入公共外部存储,必须在清单文件中请求权限:

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

这正是我所做的,问题是为什么我的文件最终被认为是内部存储而不是micro SD卡。这正是我所做的,问题是为什么我的文件最终被认为是内部存储,而不是micro SD卡。@AndyAndroid因为
Environment.getExternalStorageDirectory()
不再像以前那样工作了。使用较新的Android版本,它现在为您提供了外部存储的路径,这是您手机附带的内置(不可移动!)存储。访问实际(可移动)SD卡现在有点复杂,除非您需要写入特定文件夹,否则这里有几个问题,以便解决如何操作。直接在SD卡中写入文件是否成功。。?
<manifest ...>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    ...
</manifest>
// get the path to sdcard
File sdcard = Environment.getExternalStorageDirectory();
// to this path add a new directory path
File dir = new File(sdcard.getAbsolutePath() + "/your-dir-name/");
// create this directory if not already created
dir.mkdir();
// create the file in which we will write the contents
File file = new File(dir, "My-File-Name.txt");
FileOutputStream os = outStream = new FileOutputStream(file);
String data = "This is the content of my file";
os.write(data.getBytes());
os.close();
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");
dir.mkdirs();
File file = new File(dir, "filename");

FileOutputStream f = new FileOutputStream(file);
...