Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能。
如图:

public class GridViewFile extends Activity implements View.OnClickListener {
private Context context;
private TextView tv_title, textView;
private GridView listView;
private final String MUSIC_PATH = "/";
// 记录当前路径下 的所有文件的数组
File currentParent;
// 记录当前路径下的所有文件的文件数组
File[] currentFiles;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initView();
}
public void initView() {
findViewById(R.id.public_top_img_close).setOnClickListener(this);
listView = (GridView) findViewById(R.id.gridview);
textView = (TextView) findViewById(R.id.llss);
onLoad();
}
public void onLoad() {
ListSongsName();
}
private void ListSongsName() {
// 获取系统的SD卡目录
File root = new File(MUSIC_PATH);
// 如果SD卡存在
if (root.exists()) {
currentParent = root;
currentFiles = root.listFiles();// 获取root目录下的所有文件
// 使用当前陆慕下的全部文件,文件夹来填充ListView
inflateListView(currentFiles);
}
// 为ListView的列表项的单击事件绑定监视器
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 用户点击了文件,则调用手机已安装软件操作该文件
if (currentFiles[position].isFile()) {
onError(currentFiles[position].getPath() + "1");
Intent intent = OpenFile.openFile(currentFiles[position]
.getPath());
startActivity(intent);
} else {
// 获取currentFiles[position]路径下的所有文件
File[] tmp = currentFiles[position].listFiles();
if (tmp == null || tmp.length == 0) {
Toast.makeText(GridViewFile.this, "空文件夹!",
Toast.LENGTH_SHORT).show();
}// if
else {
// 获取用户单击的列表项对应的文件夹,设为当前的父文件夹
currentParent = currentFiles[position];
// 保存当前文件夹内的全部问价和文件夹
currentFiles = tmp;
inflateListView(currentFiles);
}
}
}
});
}
// 更新列表
private void inflateListView(File[] files) {
if (files.length == 0)
Toast.makeText(GridViewFile.this, "sd卡不存在", Toast.LENGTH_SHORT)
.show();
else {
// 创建一个List集合,List集合的元素是Map
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < files.length; i++) {
Map<String, Object> listItem = new HashMap<String, Object>();
// 如果当前File是文件夹,使用folder图标;否则使用file图标
Log.i("path", files[i].getPath());
Log.i("path", files[i].getName());
if (files[i].isDirectory())
listItem.put("icon", R.drawable.file_wenjianjia);
// else if(files[i].isFi)
else
listItem.put("icon", R.drawable.file_wenjian1);
listItem.put("fileName", files[i].getName());
// 添加List项
listItems.add(listItem);
}
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.acheshi_item, new String[] { "icon", "fileName" },
new int[] { R.id.imageView1, R.id.text_path });
// 位ListView设置Adpter
listView.setAdapter(simpleAdapter);
try {
textView.setText("当前路径为:" + currentParent.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onClick(View v) {
onbey();
}
// 返回上层菜单
private void onbey() {
try {
if (!MUSIC_PATH.equals(currentParent.getCanonicalPath())) {
// 获取上一层目录
currentParent = currentParent.getParentFile();
// 列出当前目录下的所有文件
currentFiles = currentParent.listFiles();
// 再次更新ListView
inflateListView(currentFiles);
} else {
new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher)
.setTitle("提示")
.setMessage("确定要退出吗?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).create().show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void onError(Object error) {
Toast.makeText(getApplicationContext(), error + "", Toast.LENGTH_LONG)
.show();
}
protected void onDestroy() {
super.onDestroy();
}
}
不要忘记在AndroidManifest.xml加权限哦!
<!-- SD卡权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等的更多相关文章
- 动态加载sd卡或者手机内置存储卡的so库
package com.wsc.utils; import android.content.Context; import com.wsc.common.Entrance; import com.ws ...
- Android NDK加载SD卡中的so
最近公司框架刚移植完成,由于框架程序要调用子程序,每个子程序都是一个so文件,有好几百个,把所有的so和apk打包不现实,及时可以升级维护也很麻烦.所以需要放SD卡中.考虑两种方式 1 放到设备中的 ...
- listview异步加载sd卡图片
package com.example.gridview; import java.io.File; import java.io.FileOutputStream; import java.io.I ...
- android 获取所有SD卡目录
//返回sd卡路径public static List<String> getStorageDirectories(Context context) { StorageManager sm ...
- PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签
新的测试版增强了合并文件的功能,可以合并文件夹内的图片和PDF文件,还可以在合并文件列表上直接指定与合并文件对应的PDF书签标题.通过拖放文件项目生成多层次的PDF书签.如下图所示: 另外,新的测试版 ...
- Eclipse中查看Android模拟器SD卡目录
· 有时候用到Android模拟器来模拟SD卡相关操作,在Eclipse中可以直接查看SD卡目录: 首先,新建模拟器的时候要创建SD卡,存储的大小根据需要创建: 启动模拟器,在Eclipse中打开视图 ...
- 将文件放到Android模拟器的SD卡中的两种解决方法
两种方式:一.窗口界面操作1.打开DDMS页面2.打开File Explorer页,如果没有,在Window --> Show View -->File Explorer3.一般就在mnt ...
- android 删除SD卡或者手机的缓存图片和目录
public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg"; private static String ...
- 将文件放到Android模拟器的SD卡
1.打开DDMS页面2.打开File Explorer页,如果没有,在Window –> Show View –>File Explorer3.一般就在mnt –> sdcard中4 ...
随机推荐
- ZOJ 3481. Expand Tab
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4278 题意: 给出一些文本片段,把文本中的 Tab 字符根据配置,替换成 ...
- eclipse下的webservice开发
关于eclipse下的webservice开发,有非常多的教程,这里只记下学习过程中的弯路: 1.无论是CXF模式还是AXIS模式,在出现start server之后,点击next报错:"s ...
- 共享业务稳定性测试&技术创新组
本文其实是一篇招聘贴,不管你以前是做开发还是测试,都欢迎加入我们的小组. 2014年阿里巴巴的共享业务事业部有很大变化,共享的测试团队也做了一些调整,我不再担任共享业务的测试经理,但是仍然会留在共享测 ...
- 转:SAAS 测试
基于SaaS云计算网络性能测试指标研究 来源:中国软件评测中心 作者:马子明 投稿时间:2011-04-02 1.基于SaaS的云计算 SaaS(Software as a Service,软件即 ...
- hrbust1279
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1279 int main() { l ...
- 用gulp建立自动工具,完成软件的编译、测试、打包和发布流程
gulp以task的形式组织任务. 在每一个任务中,从gulp.src()指定文件源头开始,经过一系列pipe管道处理, 最后结果保存到gulp.dest指定的目录中,(或输出到stream) 任务的 ...
- 《算法导论》 调用RANDOM(0,1),实现RANDOM(a,b)的过程
描述RANDOM(a,b)的过程的一种实现,它只调用RANDOM(0,1).作为a和b的函数,你的程序的期望运行时间是多少?(RANDOM(0,1)以等概率输出0或者1,RANDOM(a,b)以等概率 ...
- Leetcode3:Longest Substring Without Repeating Characters@Python
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- 用jquery解析JSON数据的方法以及字符串转换成json的3种方法
用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是 json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject ...
- Spring urlMapping
背景 某url性能测试表明,qps单机最高只有4000多,虽然靠堆机器可以解决问题,但是显然不是什么优雅的方案. 试着把controller里的所有的逻辑都屏蔽,只是简单的返回hello world, ...