当前位置:编程学习 > wap >>

在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目录下面的文件夹。 --------------------编程问答--------------------
引用 3 楼 ConnectionUtils 的回复:
厂家无论怎么修改sdcard的路径,它在framework层Environment.java文件中肯定指定其所在的sdcard路径变量EXTERNAL_STORAGE_DIRECTORY。所以你在应用程序里面只要调用这个函数Environment.getExternalStorageDirectory()在不同的安卓平台上面就会得到正确的sdcard的路径了; 

最……


谢谢回复哈,其实我就是用的Environment.getExternalStorageDirectory()来取得路径,只是为了举例说明就简写了,在同一个虚拟机里面,用eclipse编译生成的APK就没有问题,可以读取。但是把project放到android源代码里面用mm编译生成的APK就读不到了,
只能读到/mnt/sdcard ,/mnt/sdcard里面的内容读不出来。 --------------------编程问答-------------------- 可以通过jni绕到c++层去,不一定要在java层 --------------------编程问答--------------------
引用 4 楼 leng45 的回复:
引用 3 楼 ConnectionUtils 的回复:厂家无论怎么修改sdcard的路径,它在framework层Environment.java文件中肯定指定其所在的sdcard路径变量EXTERNAL_STORAGE_DIRECTORY。所以你在应用程序里面只要调用这个函数Environment.getExternalStorageDirectory()在不同的安卓平……

你说只能读到/mnt/sdcard/往下都读不到了,是不是权限的问题阿 ? --------------------编程问答--------------------
引用 6 楼 f839903061 的回复:
引用 4 楼 leng45 的回复:引用 3 楼 ConnectionUtils 的回复:厂家无论怎么修改sdcard的路径,它在framework层Environment.java文件中肯定指定其所在的sdcard路径变量EXTERNAL_STORAGE_DIRECTORY。所以你在应用程序里面只要调用这个函数Environment.getExternalStorage……

我在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的; --------------------编程问答--------------------
引用 12 楼 wch18956441322 的回复:
/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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,