团队博客5
今天对于获取本地图片的问题进行了处理,其中由于图片过多,加载图片需要很长的时间,经过一些对于代码的修改,我们把图片的缓存时间从将近5秒的时间压缩至1秒多,可以大大减少图片缓存时间。
package com.example.Service; import java.io.File; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import com.example.shuxing.AppInfor; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; public class AppInforService { private Context context; private PackageManager pm; public AppInforService(Context context) { this.context=context; pm=context.getPackageManager(); } /*得到手机中所有的应用程序信息*/ public List<AppInfor> getAppInfor() throws Exception { //创建要返回的集合对象 List<AppInfor> appInfor =new ArrayList<AppInfor>(); //获取手机中所有安装的应用集合 List<ApplicationInfo> applicationInfor=pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); //遍历所有的应用集合 for(ApplicationInfo info : applicationInfor) { if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { AppInfor appInfo=new AppInfor(); //获取应用程序的图标 Drawable app_icon=info.loadIcon(pm); appInfo.setIcon(app_icon); //获取应用名称 String app_name=info.loadLabel(pm).toString(); appInfo.setName(app_name); //获取应用的包名 String packageName=info.packageName; appInfo.setPackageName(packageName); //获取版本信息 try { PackageInfo packageInfo=pm.getPackageInfo(packageName, 0); String appversion=packageInfo.versionName; appInfo.setAppversion(appversion); }catch(NameNotFoundException e){ e.printStackTrace(); } //获取路径 String path=info.sourceDir; appInfo.setPath(path); //更新显示当前包得大小信息 String dir=info.publicSourceDir; int value=Integer.valueOf((int)new File(dir).length()); BigDecimal apkSize=parseApkSize(value); String size=apkSize.toString(); appInfo.setSize(size); appInfor.add(appInfo); } } return appInfor; } private BigDecimal parseApkSize(int size) { BigDecimal bd = new BigDecimal((double)size/(1024*1024)); BigDecimal setScale = bd.setScale(2, BigDecimal.ROUND_DOWN); return setScale; } }
package com.example.Service; import java.io.File; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import com.example.shuxing.PictureInfor; import com.example.shuxing.PicturePath; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.media.ExifInterface; import android.net.Uri; import android.os.AsyncTask; import android.provider.MediaStore; import android.provider.MediaStore.Images.Thumbnails; public class PictureInforService { private Context context; private List<PictureInfor> list=new ArrayList<PictureInfor>(); private ArrayList<PicturePath> listpath; public PictureInforService(Context context) { this.context=context; } public List<PictureInfor> getPictureInfor() { MyPicture mp=new MyPicture(); listpath=mp.doInBackground(); if(listpath.size()==0) { return null; } for(int i=0;i<listpath.size();i++) { File file=new File(listpath.get(i).getPath()); PictureInfor picture=new PictureInfor(); //图片名称 picture.setName(file.getName()); //图片路径 picture.setPath(file.getAbsolutePath()); //图片大小 int value=Integer.valueOf((int)file.length()); BigDecimal pSize=parseApkSize(value); String size=pSize.toString(); picture.setSize(size); //图片 Bitmap bitmap=MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), listpath.get(i).getID(), Thumbnails.MICRO_KIND, null); picture.setIcon(bitmap); //图片日期 String date=null; try{ ExifInterface exif = new ExifInterface(file.getPath()); date=exif.getAttribute(ExifInterface.TAG_DATETIME); } catch(Exception ee){ } picture.setData(date); list.add(picture); } return list; } private BigDecimal parseApkSize(int size) { BigDecimal bd = new BigDecimal((double)size/(1024*1024)); BigDecimal setScale = bd.setScale(3, BigDecimal.ROUND_DOWN); return setScale; }
public class MyPicture extends AsyncTask<String, Integer, ArrayList<PicturePath>> { @Override protected ArrayList<PicturePath> doInBackground(String... params) { ArrayList<PicturePath> lpath=new ArrayList<PicturePath>(); String[] proj={MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID}; Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mContentResolver =context.getContentResolver(); Cursor cursor=mContentResolver.query(mImageUri, proj, null, null,null); while(cursor.moveToNext()) { PicturePath pp=new PicturePath(); String path=cursor.getString(0); long id=Long.parseLong(cursor.getString(1)); pp.setID(id); pp.setPath(path); lpath.add(pp); } /* Uri mImageUri1 = MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI; ContentResolver mContentResolver1 =context.getContentResolver(); Cursor cursor1=mContentResolver1.query(mImageUri1,proj, null, null, null); Cursor cursor1=context.getContentResolver().query(uri1, proj1, null, null, null); while(cursor1.moveToNext()) { String path=cursor1.getString(0); lpath.add(new File(path).getAbsolutePath()); }*/ cursor.close(); /*cursor1.close();*/ return lpath; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(ArrayList<PicturePath> bytes) { super.onPostExecute(bytes); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } }