Android 获取SD卡的图片资源
首先我先获得SD卡下的根目录路径:
privateString isSdcard(){
File sdcardDir=null;
boolean isSDExist=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(isSDExist){
//如果存在SDcard 就找到跟目录 sdcardDir=Environment.getExternalStorageDirectory(); return sdcardDir.toString();
}else {
return null;
}
}
}
找到/sdcard之后,就开始利用File[] f = file.listFile();的方法获得目录下的所有文件的列表。
public void getpicpath(String sdpath){
//打开SD卡目录
File file = new File(sdpath);
//获取SD卡目录列表
File[] files =file.listFiles();
for(int z=;z<files.length;z++){
File f = files[z];
if(f.isFile()){
isfile(f);
}else {
notfile(f);
}
}
}
如果是文件的话,就跳入isfile(File file);的方法中,如果是文件夹的话就跳入notfile(File file);方法中。
public void isfile(File file){
Log.i(TAG, "isfile");
String fnm=file.getPath();
Log.i(TAG, "isfile=="+fnm);
mapsd=new HashMap<String, String>();
String filename=file.getName();
int idx = filename.lastIndexOf(".");
if (idx <= ) {
return;
}
String suffix =filename.substring(idx+, filename.length());
if (suffix.toLowerCase().equals("jpg") ||
suffix.toLowerCase().equals("jpeg") ||
suffix.toLowerCase().equals("bmp") ||
suffix.toLowerCase().equals("png") ||
suffix.toLowerCase().equals(".gif") ){ mapsd.put("imagepath",file.getPath().toString());
listsd.add(mapsd);
}
}
如果是有文件isfile 就配合他文件名的后缀名是否为图片,是的话放进mapsd中,再加到list中。
如果有文件是文件夹的话,就继续用file.listFile()打开它的文件夹里面的内容,再用for语句判断它里面的文件是否有文件,如果有就isfile();无,就利用getpicpath()打开它。
public void notfile(File file){
Log.i(TAG, "notfile Yes");
Log.i(TAG, "notfilepath"+file.getPath());
File[] files = file.listFiles();
if(files == null){
return;
}
for(int i = ;i<files.length;i++){
Log.i(TAG, "notfile int="+String.valueOf(files.length));
File fis=files[i];
if(fis.isFile()){
isfile(fis);
}else{
String SDpath=fis.getPath();
File fileSD=new File(SDpath);
Log.i(TAG, "notfile ="+fileSD);
File[] filess=fileSD.listFiles();
if(filess == null){
return;
}
for(int j=;j<filess.length;j++){
getpicpath(fileSD.toString());
}
}
}
}
经过上述复杂的转换,终于可以得到了存有sdcared下所有图片的path的list了,可是其中这个list却是好巨大的,因为它连.thumbnails下的目录图片也得到了,其实起初我不知道这个文件是什么东西来的,在SDcare中看不到,后来一翻译就知道是缩略图。再翻阅一下网络,发现缩略图其实可以Cursor查到的,再想,缩略图和原图片应该是有关联的,果然,可以通过Thumbnails.IMAGE_ID,在Media.EXTERNAL_CONTENT_URI,中找到相对应的path,终于大费周章下来只不过是两个简单的方法的就可以获得SD卡下所有图片的path,不过我们获得的缩略图是整个SD卡图片的缩略图,该如何将他们按不同的文件夹分放呢?我还在研究。
先获得缩略图:
list = new ArrayList<HashMap<String,String>>();
cr = getContentResolver();
String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID,
Thumbnails.DATA };
Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection,
null, null, null);
if(cur.moveToFirst())
{
int _id;
int image_id;
String image_path;
int _idColumn = cur.getColumnIndex(Thumbnails._ID);
int image_idColumn =cur.getColumnIndex(Thumbnails.IMAGE_ID);
int dataColumn = cur.getColumnIndex(Thumbnails.DATA);
Log.i(TAG, String.valueOf(image_idColumn)) ;
do
{
// Get the field values
_id = cur.getInt(_idColumn);
image_id =cur.getInt(image_idColumn);
image_path =cur.getString(dataColumn);
// Do something with the values.
// Log.i(TAG, _id + " image_id:"+ image_id + " path:"
// + image_path +"---");
HashMap<String, String> hash = new HashMap<String, String>();
hash.put("image_id", image_id + "");
hash.put("path", image_path);
list.add(hash);
}
while (cur.moveToNext());
}
上述方法获得含有image_path和id的list
这里的image_path其实是缩略图的路径,要找到原图片的路径要利用image_id和原路径相关联的关系寻找,如下:
我是用SimpleAdapter显示图片的,所以点击的时候会得到一个position的位置int ,再找到image_id;
public void onItemClick(AdapterView<?> arg0, Viewarg1, int position,
long arg3)
{
cr = getContentResolver();
String image_id = list.get(position).get("image_id");
String[] projection = { Media._ID, Media.DATA };
Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection,
Media._ID + "=" + image_id, null, null);
if (cursor != null)
{
cursor.moveToFirst();
Stringpath = cursor.getString(cursor.getColumnIndex(Media.DATA));
Log.i(TAG,path);
}else {
Toast.makeText(this, "Image doesn't exist!", Toast.LENGTH_SHORT)
.show();
}
}
Android 获取SD卡的图片资源的更多相关文章
- Android 获取SD卡路径和推断SD卡是否存在
android获取sd卡路径方法: 不建议直接写死android sd卡的路径. public String getSDPath(){ File sdDir = null; boolean sdCar ...
- android 获取sd卡根目录
dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){ File ...
- Android获取SD卡路径及SDCard内存的方法
这篇文章主要介绍了Android获取SD卡路径及SDCard内存的方法,较为详细的分析了Android针对SD卡操作所涉及的类及其具体函数功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了A ...
- Android获取SD卡路径/内存的几种方法
Android获取SD卡路径 本篇将会带领大家学习如何获取android路径的几种常见用法,但在我开始bb之前需要大家清楚android中内存和外存之间的区别,下面进行简短介绍:android中的内存 ...
- Android - 获取SD卡的内存空间大小
获取SD卡的内存空间大小 //获得SD卡空间的信息 File path=Environment.getExternalStorageDirectory(); StatFs statFs=new Sta ...
- Android获取SD卡中选中图片的路径(URL)
最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: [html] view plain copy <?xml ver ...
- android获取sd卡路径方法
public String getSDPath(){ File sdDir = null; boolean sdCardExist = Environment.getExternalStorage ...
- Android获取SD卡总容量,可用大小,机身内存总容量及可用大小
public long getSDTotalSize() { /*获取存储卡路径*/ File sdcardDir= Environment.getExternalStorageDirectory() ...
- android 获取SD卡的图片及其路径
1.首先是intent的设置: private static final int IMAGECODE = 0; Intent imageIntent = new Intent(Intent.ACYIO ...
随机推荐
- 状态机模式中的Task与对象池
Task 抽象带来Task 首先,假设我们有这么一段逻辑:收到一个参数,先校验格式是否正确,再提取相关的参数出来,执行我们的事务,然后构建结果并返回.伪代码如下: /** * 一个engine类 ** ...
- 七,OpenERP 移库操作模块
整个代码中比较关键的地方是如何统计出不同库位的产品数量.
- 我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容
我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容,目前测试了300多个新闻网站的新闻页,都能准确识别
- mono上部署web程序初体验
早就想体验一下mono,但一直琐事缠身.难得有时间,便在网上一通狂搜mono相关的资料. 如果想使用Apache服务器,只能使用mod_mono的方式,这里有详细的介绍.这种方式有点繁琐,需要安装一大 ...
- Difference between $.ajax() and $.get() and $.load()
转自:Difference between $.ajax() and $.get() and $.load() $.ajax() is the most configurable one, where ...
- HTML5 的拖放(实例:两个div之间拖放图片)
重点解释: 首先,为了使元素(如本图片)可拖动,把 draggable 属性设置为 true : dataTransfer.setData() 方法设置被拖数据的数据类型和值: ondragover ...
- 如何创建一个基于Node的HTTP服务器
首先创建一个HTTP服务器. var http = require('http'); function serve(request,response) { console.log(request.me ...
- iOS开源项目周报0316
由OpenDigg 出品的iOS开源项目周报第十二期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等.GodEye ...
- Response.cookies和Request.cookies
Response.cookies和Request.cookies的区别很重要,由于方法基本都是差不多的,特别对于初学者而言,很容易出现混淆. 简单说就是创建cookie用response,获取cook ...
- SQL Serever学习13——数据库编程语言
编程基础 注释 注释命名来对一些语句进行说明,便于日后维护或者其他用户理解,注释不会执行. 单行注释 SELECT GETDATE() --查询当前日期 多行注释 /* 注释有助于 理解操作的内容 查 ...