Log*_*ic1 6 android android-4.4-kitkat
我花了几个小时现在正在寻找(和尝试)许多不同的方法,在获得无数"eacces permission denied"错误后,将一些文件写入我的4.4 Android KitKat的可移动SD卡.现在似乎Google对SD卡上的文件系统的访问权限有限,您只能写入应用程序拥有的目录(例如:/Android/data/com.mycompany.myapp/files/).
最后,我得到了一些工作,可以在可移动SD卡上创建一个可以写入的目录.但是我很好奇为什么为了获得对可移动SD卡上的这个拥有目录的访问,我首先必须使用外部目录的路径创建一个新的文件对象?
我的实施:
首先,我创建两个全局变量来容纳外部和可移动路径的字符串.
MainActivity
public class MainActivity extends ActionBarActivity {
String externalStorageDirectory;//path to owned external storage files
String secondaryStorageDirectory ;//path to owned removable storage files
Run Code Online (Sandbox Code Playgroud)
然后我询问系统调用制造商特定目录的内容,并开始连接externalStorage和removableStorage变量的绝对路径.我还创建了一个新的File对象,该对象使用外部应用程序拥有的目录的路径进行初始化.
onCreate()
externalStorageDirectory = this.getExternalFilesDir(null).toString();//build absolute path to the app owned external directory
File folder = new File(externalStorageDirectory ); //THIS LINE IS CRUCIAL!!
Log.d("DEBUG", " - External Path" + externalStorageDirectory );// "/storage/emulated/0/Android/data/com.mycompany.myapp/files"
String ownedDirectory = "/Android/data/" + this.getPackageName() + "/files/";
secondaryStorageDirectory = System.getenv("SECONDARY_STORAGE").toString() + ownedDirectory;//build absolute path to the app owned removable directory
Log.d("DEBUG", " - Removable Path"+secondaryStorageDirectory );// "/storage/external/Android/data/com.mycompany.myapp/files/"
Run Code Online (Sandbox Code Playgroud)
最后,我能够将文件写入应用程序拥有的可移动SD卡目录.更具体地说,我使用AsyncTask下载我的文件并保存它们,这篇文章的方法#1 .
doInBackground()
output = new FileOutputStream(secondaryStorageDirectory + "myawesomefile.mp4");
Run Code Online (Sandbox Code Playgroud)
然后我可以通过adb shell导航到可移动SD卡目录,我可以看到我的文件.
Adb shell输出:
//internal storage
shell@QTAQZ3:/storage/emulated/0/Android/data/com.mycompany.myapp/files $ ls
s <
//removable SD card
shell@QTAQZ3:/storage/external/Android/data/com.mycompany.myapp/files $ ls
ls
myawesomefile.mp4
<
Run Code Online (Sandbox Code Playgroud)
只是重申一点:
File folder = new File(externalStorageDirectory); //THIS LINE IS CRUCIAL!!
File folder = new File(secondaryStorageDirectory ); //THIS LINE DOES NOTHING?
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
不可否认,我对Android编程相对较新,所以我甚至不确定这种方法是正确的还是只是一个幸运的黑客?但它似乎现在在我的应用程序中工作.
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |