在android源码中编译的APK不能读取SD卡的内容
大家好,有这样一段代码File settingFile = new File(getString(R.string.settingFile));
Log.d("debug",settingFile.toString());
if(settingFile.exists()){
Log.d("debug","exists");
} else {
Log.d("debug","not exists");
}
同样的一段代码,在eclipse中编译生成的APK执行打出的log是exists
但是把这个代码拿到android的源代码环境中去编译,生成的APK执行后却打出来的是not exists
一步一步打log后发现源代码环境中编译的APK只能识别到/mnt/sdcard, sdcard里面的内容就读不出来来
请大侠们帮帮忙,源代码环境中编译的APK怎样才能读取SD卡里面的内容,万分感谢。 --------------------编程问答-------------------- 在线等哈,各位请帮忙 --------------------编程问答-------------------- String path = Environment.getExternalStorageDirectory()+"/MediaPad/video/";
//不要用R.string.settingFile将路径配置死了
File settingFile = new File(path);
Log.d("debug",settingFile.toString());
if(settingFile.exists()){
Log.d("debug","exists");
} else {
Log.d("debug","not exists");
}
--------------------编程问答-------------------- 厂家无论怎么修改sdcard的路径,它在framework层Environment.java文件中肯定指定其所在的sdcard路径变量EXTERNAL_STORAGE_DIRECTORY。所以你在应用程序里面只要调用这个函数Environment.getExternalStorageDirectory()在不同的安卓平台上面就会得到正确的sdcard的路径了;
最土的办法就是遍历查找mnt目录下面的文件夹。 --------------------编程问答--------------------
谢谢回复哈,其实我就是用的Environment.getExternalStorageDirectory()来取得路径,只是为了举例说明就简写了,在同一个虚拟机里面,用eclipse编译生成的APK就没有问题,可以读取。但是把project放到android源代码里面用mm编译生成的APK就读不到了,
只能读到/mnt/sdcard ,/mnt/sdcard里面的内容读不出来。 --------------------编程问答-------------------- 可以通过jni绕到c++层去,不一定要在java层 --------------------编程问答--------------------
你说只能读到/mnt/sdcard/往下都读不到了,是不是权限的问题阿 ? --------------------编程问答--------------------
我在4.1也遇到了,估计是权限问题,但我用上层应用生成的apk来访问外置sdcard,都可以读,没有外加任何权限
我在framwork/base/policy下面执行访问也不行,在framework/base/core/res/AndroidManifest.xml里面加入了
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
还是不行,依旧读不到,执行file.exists()仍旧返回错误 --------------------编程问答-------------------- 1-加权限
2-有些文件是不能读取的,比如带.开头的文件。
我也不知道为啥。。
--------------------编程问答-------------------- 请问一下,楼主的这个问题解决了吗? --------------------编程问答-------------------- 此问题我也遇到过,建议你先看下权限,你在源码中编你的apk就是system用户,但是/sdcard目录的文件可能不允许system 用户去读写,办法是修改/sdcard的权限让system用户可以读写(前提是你做的是定制开发) --------------------编程问答-------------------- 对,我也觉得是权限问题,所谓的权限并不是说单纯的Android 清单文件中的权限,是这个/mnt/sdcard/的权限(linux下的权限概念) --------------------编程问答-------------------- /sdcard就是链接到/mnt/sdcard的; --------------------编程问答--------------------
说错了,
shell@android:/ $ ls -al mnt/
ls -al mnt/
drwxr-xr-x root system 2013-09-16 09:41 asec
d--------- system system 2013-09-16 09:40 cd-rom
drwxr-xr-x root system 2013-09-16 09:40 obb
lrwxrwxrwx root root 2013-09-16 09:40 sdcard -> /storage/sdcard0
lrwxrwxrwx root root 2013-09-16 09:40 sdcard2 -> /storage/sdcard1
drwx------ root root 2013-09-16 09:40 secure
看/mnt/sdcard的权限是777的啊,程序应该是可以读的啊。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>这个权限加了吗?
补充:移动开发 , Android