sd卡中的照片怎么导入手机照片导入sd卡相册

三星手机助手怎么设置添加图片到手机SD卡 以前弄的全部都保存到手机内存了_百度知道
三星手机助手怎么设置添加图片到手机SD卡 以前弄的全部都保存到手机内存了
若将手机中的文件与外置SD卡互相转移,请操作:1.若是将存储在话机中的多媒体文件移动到SD卡中:我的文件-所有文件-sdcard0-查找需要移动的文件夹-长按住不松手-移动至(若没有此菜单,请点击菜单键-移动)-返回到external_sd-点击&移动到此处&。反之亦然。2.若将手机应用程序移动到SD卡中,建议尝试:1).若手机系统是安卓2.3版本,支持将安装的应用程序移动到外置SD卡。操作:设置-应用程序-管理应用程序-选中某个程序-移至SD卡。2).若手机系统是4.0、4.1版本,应用程序不支持移动到内存卡。3).若使用的是安卓4.2/4.3/4.4操作系统(包括部分升级到安卓4.3的机型),如需将软件移动到外置SD卡,请尝试:设定-更多(一般)应用程序管理器-选中某个程序-移动到SD卡(若没有此选项,则不支持该功能)。注:不是所有的程序均可移至到SD卡,具体根据所下载的软件决定。
其他类似问题
为您推荐:
提问者采纳
“我的文件”-“设定”-“设置图片主目录”
能不能具体点啊?哪个我的文件啊
我和你一样的手机。应用程序中就有一个图标“我的文件”
手机上的 应用程序管理器?还是什么?
不会是你把那个东西删除了吧。不是管理器。就是一个程序图标。
提问者评价
其他2条回答
你只要打开360手机助手界面上 右上角有个类似于 ↓ 的按钮,打开里面有 设置 在设置中把安装目录设置为SD卡就可以了。
用电脑来......
恩恩 我在用电脑 然后呢?》
360手机助手的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎么把修改后的图片在存入SD卡中
[问题点数:40分,结帖人ZHAOCHUANsuxiaoyu]
怎么把修改后的图片在存入SD卡中
[问题点数:40分,结帖人ZHAOCHUANsuxiaoyu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年6月 移动平台大版内专家分月排行榜第二
2011年6月 移动平台大版内专家分月排行榜第二
2011年6月 移动平台大版内专家分月排行榜第二
2010年12月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
2011年4月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第三2011年3月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第三2010年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第三2010年10月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第三
2011年6月 移动平台大版内专家分月排行榜第二
2011年6月 移动平台大版内专家分月排行榜第二
2011年6月 移动平台大版内专家分月排行榜第二
2011年6月 移动平台大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。64358人阅读
Android 高手进阶(21)
作者同类文章X
转载请注明出处package com.example.
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import android.content.C
import android.graphics.B
import android.pressF
import android.graphics.BitmapF
import android.os.E
public class FileUtils {
* sd卡的根目录
private static String mSdRootPath = Environment.getExternalStorageDirectory().getPath();
* 手机的缓存根目录
private static String mDataRootPath =
* 保存Image的目录名
private final static String FOLDER_NAME = &/AndroidImage&;
public FileUtils(Context context){
mDataRootPath = context.getCacheDir().getPath();
* 获取储存Image的目录
private String getStorageDirectory(){
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ?
mSdRootPath + FOLDER_NAME : mDataRootPath + FOLDER_NAME;
* 保存Image的方法,有sd卡存储到sd卡,没有就存储到手机目录
* @param fileName
* @param bitmap
* @throws IOException
public void savaBitmap(String fileName, Bitmap bitmap) throws IOException{
if(bitmap == null){
String path = getStorageDirectory();
File folderFile = new File(path);
if(!folderFile.exists()){
folderFile.mkdir();
File file = new File(path + File.separator + fileName);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
press(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
* 从手机或者sd卡获取Bitmap
* @param fileName
public Bitmap getBitmap(String fileName){
return BitmapFactory.decodeFile(getStorageDirectory() + File.separator + fileName);
* 判断文件是否存在
* @param fileName
public boolean isFileExists(String fileName){
return new File(getStorageDirectory() + File.separator + fileName).exists();
* 获取文件的大小
* @param fileName
public long getFileSize(String fileName) {
return new File(getStorageDirectory() + File.separator + fileName).length();
* 删除SD卡或者手机的缓存图片和目录
public void deleteFile() {
File dirFile = new File(getStorageDirectory());
if(! dirFile.exists()){
if (dirFile.isDirectory()) {
String[] children = dirFile.list();
for (int i = 0; i & children. i++) {
new File(dirFile, children[i]).delete();
dirFile.delete();
}package com.example.
public class Images {
public final static String[] imageThumbUrls = new String[] {
&/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s160-c/A%252520Photographer.jpg&,
&/--dq8niRp7W4/URquVgmXvgI/AAAAAAAAAbs/-gnuLQfNnBA/s160-c/A%252520Song%252520of%252520Ice%252520and%252520Fire.jpg&,
&/-7qZeDtRKFKc/URquWZT1gOI/AAAAAAAAAbs/hqWgteyNXsg/s160-c/Another%252520Rockaway%252520Sunset.jpg&,
&/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg&,
&/-8HO-4vIFnlw/URquZnsFgtI/AAAAAAAAAbs/WT8jViTF7vw/s160-c/Antelope%252520Hallway.jpg&,
&/-WIuWgVcU3Qw/URqubRVcj4I/AAAAAAAAAbs/YvbwgGjwdIQ/s160-c/Antelope%252520Walls.jpg&,
&/-UBmLbPELvoQ/URqucCdv0kI/AAAAAAAAAbs/IdNhr2VQoQs/s160-c/Apre%2525CC%2520la%252520Pluie.jpg&,
&/-s-AFpvgSeew/URquc6dF-JI/AAAAAAAAAbs/Mt3xNGRUd68/s160-c/Backlit%252520Cloud.jpg&,
&/-bvmif9a9YOQ/URquea3heHI/AAAAAAAAAbs/rcr6wyeQtAo/s160-c/Bee%252520and%252520Flower.jpg&,
&/-n7mdm7I7FGs/URqueT_BT-I/AAAAAAAAAbs/9MYmXlmpSAo/s160-c/Bonzai%252520Rock%252520Sunset.jpg&,
&/-4CN4X4t0M1k/URqufPozWzI/AAAAAAAAAbs/8wK41lg1KPs/s160-c/Caterpillar.jpg&,
&/-rrFnVC8xQEg/URqufdrLBaI/AAAAAAAAAbs/s69WYy_fl1E/s160-c/Chess.jpg&,
&/-WVpRptWH8Yw/URqugh-QmDI/AAAAAAAAAbs/E-MgBgtlUWU/s160-c/Chihuly.jpg&,
&/-0BDXkYmckbo/URquhKFW84I/AAAAAAAAAbs/ogQtHCTk2JQ/s160-c/Closed%252520Door.jpg&,
&/-PyggXXZRykM/URquh-kVvoI/AAAAAAAAAbs/hFtDwhtrHHQ/s160-c/Colorado%252520River%252520Sunset.jpg&,
&/-ZAs4dNZtALc/URquikvOCWI/AAAAAAAAAbs/DXz4h3dll1Y/s160-c/Colors%252520of%252520Autumn.jpg&,
&/-GztnWEIiMz8/URqukVCU7bI/AAAAAAAAAbs/jo2Hjv6MZ6M/s160-c/Countryside.jpg&,
&/-bEg9EZ9QoiM/URquklz3FGI/AAAAAAAAAbs/UUuv8Ac2BaE/s160-c/Death%252520Valley%2520Dunes.jpg&,
&/-ijQJ8W68tEE/URqulGkvFEI/AAAAAAAAAbs/zPXvIwi_rFw/s160-c/Delicate%252520Arch.jpg&,
&/-Oh8mMy2ieng/URqullDwehI/AAAAAAAAAbs/TbdeEfsaIZY/s160-c/Despair.jpg&,
&/-gl0y4UiAOlk/URqumC_KjBI/AAAAAAAAAbs/PM1eT7dn4oo/s160-c/Eagle%252520Fall%252520Sunrise.jpg&,
&/-hYYHd2_vXPQ/URqumtJa9eI/AAAAAAAAAbs/wAalXVkbSh0/s160-c/Electric%252520Storm.jpg&,
&/-PyY_yiyjPTo/URqunUOhHFI/AAAAAAAAAbs/azZoULNuJXc/s160-c/False%252520Kiva.jpg&,
&/-PYvLVdvXywk/URqunwd8hfI/AAAAAAAAAbs/qiMwgkFvf6I/s160-c/Fitzgerald%252520Streaks.jpg&,
&/-KIR_UobIIqY/URquoCZ9SlI/AAAAAAAAAbs/Y4d4q8sXu4c/s160-c/Foggy%252520Sunset.jpg&,
&/-9lzOk_OWZH0/URquoo4xYoI/AAAAAAAAAbs/AwgzHtNVCwU/s160-c/Frantic.jpg&,
&/-0X3JNaKaz48/URqupH78wpI/AAAAAAAAAbs/lHXxu_zbH8s/s160-c/Golden%252520Gate%252520Afternoon.jpg&,
&/-95sb5ag7ABc/URqupl95RDI/AAAAAAAAAbs/g73R20iVTRA/s160-c/Golden%252520Gate%252520Fog.jpg&,
&/-JB9v6rtgHhk/URqup21F-zI/AAAAAAAAAbs/64Fb8qMZWXk/s160-c/Golden%252520Grass.jpg&,
&/-EIBGfnuLtII/URquqVHwaRI/AAAAAAAAAbs/FA4McV2u8VE/s160-c/Grand%252520Teton.jpg&,
&/-WoMxZvmN9nY/URquq1v2AoI/AAAAAAAAAbs/grj5uMhL6NA/s160-c/Grass%252520Closeup.jpg&,
&/-6hZiEHXx64Q/URqurxvNdqI/AAAAAAAAAbs/kWMXM3o5OVI/s160-c/Green%252520Grass.jpg&,
&/-6LVb9OXtQ60/URquteBFuKI/AAAAAAAAAbs/4F4kRgecwFs/s160-c/Hanging%252520Leaf.jpg&,
&/-zAvf__52ONk/URqutT_IuxI/AAAAAAAAAbs/D_bcuc0thoU/s160-c/Highway%2525201.jpg&,
&/-H4SrUg615rA/URquuL27fXI/AAAAAAAAAbs/4aEqJfiMsOU/s160-c/Horseshoe%252520Bend%252520Sunset.jpg&,
&/-JhFi4fb_Pqw/URquuX-QXbI/AAAAAAAAAbs/IXpYUxuweYM/s160-c/Horseshoe%252520Bend.jpg&,
&/-UGgssvFRJ7g/URquueyJzGI/AAAAAAAAAbs/yYIBlLT0toM/s160-c/Into%252520the%252520Blue.jpg&,
&/-CH7KoupI7uI/URquu0FF__I/AAAAAAAAAbs/R7GDmI7v_G0/s160-c/Jelly%252520Fish%2525202.jpg&,
&/-pwuuw6yhg8U/URquvPxR3FI/AAAAAAAAAbs/VNGk6f-tsGE/s160-c/Jelly%252520Fish%2525203.jpg&,
&/-GoUQVw1fnFw/URquv6xbC0I/AAAAAAAAAbs/zEUVTQQ43Zc/s160-c/Kauai.jpg&,
&/-8QdYYQEpYjw/URquwvdh88I/AAAAAAAAAbs/cktDy-ysfHo/s160-c/Kyoto%252520Sunset.jpg&,
&/-vPeekyDjOE0/URquwzJ28qI/AAAAAAAAAbs/qxcyXULsZrg/s160-c/Lake%252520Tahoe%252520Colors.jpg&,
&/-xBPxWpD4yxU/URquxWHk8AI/AAAAAAAAAbs/ARDPeDYPiMY/s160-c/Lava%252520from%252520the%252520Sky.jpg&,
&/-897VXrJB6RE/URquxxxd-5I/AAAAAAAAAbs/j-Cz4T4YvIw/s160-c/Leica%mm%252520Summilux.jpg&,
&/-qSJ4D4iXzGo/URquyDWiJ1I/AAAAAAAAAbs/k2pBXeWehOA/s160-c/Leica%mm%252520Summilux.jpg&,
&/-dwlPg83vzLg/URquylTVuFI/AAAAAAAAAbs/G6SyQ8b4YsI/s160-c/Leica%%528Front%252529.jpg&,
&/-R3_EYAyJvfk/URquzQBv8eI/AAAAAAAAAbs/b9xhpUM3pEI/s160-c/Light%252520to%252520Sand.jpg&,
&/-fHY5h67QPi0/URqu0Cp4J1I/AAAAAAAAAbs/0lG6m94Z6vM/s160-c/Little%252520Bit%252520of%252520Paradise.jpg&,
&/-TzF_LwrCnRM/URqu0RddPOI/AAAAAAAAAbs/gaj2dLiuX0s/s160-c/Lone%252520Pine%252520Sunset.jpg&,
&/-4HdpJ4_DXU4/URqu046dJ9I/AAAAAAAAAbs/eBOodtk2_uk/s160-c/Lonely%252520Rock.jpg&,
&/-erbF--z-W4s/URqu1ajSLkI/AAAAAAAAAbs/xjDCDO1INzM/s160-c/Longue%252520Vue.jpg&,
&/-0CXJRdJaqvc/URqu1opNZNI/AAAAAAAAAbs/PFB2oPUU7Lk/s160-c/Look%252520Me%252520in%252520the%252520Eye.jpg&,
&/-D_5lNxnDN6g/URqu2Tk7HVI/AAAAAAAAAbs/p0ddca9W__Y/s160-c/Lost%252520in%2520Field.jpg&,
&/-flsqwMrIk2Q/URqu24PcmjI/AAAAAAAAAbs/5ocIH85XofM/s160-c/Marshall%252520Beach%252520Sunset.jpg&,
&/-Y4lgryEVTmU/URqu28kG3gI/AAAAAAAAAbs/OjXpekqtbJ4/s160-c/Mono%252520Lake%252520Blue.jpg&,
&/-AaHAJPmcGYA/URqu3PIldHI/AAAAAAAAAbs/lcTqk1SIcRs/s160-c/Monument%252520Valley%252520Overlook.jpg&,
&/-vKxfdQ83dQA/URqu31Yq_BI/AAAAAAAAAbs/OUoGk_2AyfM/s160-c/Moving%252520Rock.jpg&,
&/-CG62QiPpWXg/URqu4ia4vRI/AAAAAAAAAbs/0YOdqLAlcAc/s160-c/Napali%252520Coast.jpg&,
&/-wdGrP5PMmJQ/URqu5PZvn7I/AAAAAAAAAbs/m0abEcdPXe4/s160-c/One%252520Wheel.jpg&,
&/-6WS5DoCGuOA/URqu5qx1UgI/AAAAAAAAAbs/giMw2ixPvrY/s160-c/Open%252520Sky.jpg&,
&/-u8EHKj8G8GQ/URqu55sM6yI/AAAAAAAAAbs/lIXX_GlTdmI/s160-c/Orange%252520Sunset.jpg&,
&/-74Z5qj4bTDE/URqu6LSrJrI/AAAAAAAAAbs/XzmVkw90szQ/s160-c/Orchid.jpg&,
&/-lEQE4h6TePE/URqu6t_lSkI/AAAAAAAAAbs/zvGYKOea_qY/s160-c/Over%252520there.jpg&,
&/-cauH-53JH2M/URqu66v_USI/AAAAAAAAAbs/EucwwqclfKQ/s160-c/Plumes.jpg&,
&/-eDLT2jHDoy4/URqu7axzkAI/AAAAAAAAAbs/iVZE-xJ7lZs/s160-c/Rainbokeh.jpg&,
&/-j1NLqEFIyco/URqu8L1CGcI/AAAAAAAAAbs/aqZkgX66zlI/s160-c/Rainbow.jpg&,
&/-DRnqmK0t4VU/URqu8XYN9yI/AAAAAAAAAbs/LgvF_592WLU/s160-c/Rice%252520Fields.jpg&,
&/-hwh1v3EOGcQ/URqu8qOaKwI/AAAAAAAAAbs/IljRJRnbJGw/s160-c/Rockaway%252520Fire%252520Sky.jpg&,
&/-wjV6FQk7tlk/URqu9jCQ8sI/AAAAAAAAAbs/RyYUpdo-c9o/s160-c/Rockaway%252520Flow.jpg&,
&/-6cAXNfo7D20/URqu-BdzgPI/AAAAAAAAAbs/OmsYllzJqwo/s160-c/Rockaway%252520Sunset%252520Sky.jpg&,
&/-sl8fpGPS-RE/URqu_BOkfgI/AAAAAAAAAbs/Dg2Fv-JxOeg/s160-c/Russian%252520Ridge%252520Sunset.jpg&,
&/-gVtY36mMBIg/URqu_q91lkI/AAAAAAAAAbs/3CiFMBcy5MA/s160-c/Rust%252520Knot.jpg&,
&/-GHeImuHqJBE/URqu_FKfVLI/AAAAAAAAAbs/axuEJeqam7Q/s160-c/Sailing%252520Stones.jpg&,
&/-hBbYZjTOwGc/URqu_ycpIrI/AAAAAAAAAbs/nAdJUXnGJYE/s160-c/Seahorse.jpg&,
&/-Iwi6-i6IexY/URqvAYZHsVI/AAAAAAAAAbs/5ETWl4qXsFE/s160-c/Shinjuku%252520Street.jpg&,
&/-amhnySTM_MY/URqvAlb5KoI/AAAAAAAAAbs/pFCFgzlKsn0/s160-c/Sierra%252520Heavens.jpg&,
&/-dJgjepFrYSo/URqvBVJZrAI/AAAAAAAAAbs/v-F5QWpYO6s/s160-c/Sierra%252520Sunset.jpg&,
&/-Z4zGiC5nWdc/URqvBdEwivI/AAAAAAAAAbs/ZRZR1VJ84QA/s160-c/Sin%252520Lights.jpg&,
&/-_0cYiWW8ccY/URqvBz3iM4I/AAAAAAAAAbs/9N_Wq8MhLTY/s160-c/Starry%252520Lake.jpg&,
&/-A9LMoRyuQUA/URqvCYx_JoI/AAAAAAAAAbs/s7sde1Bz9cI/s160-c/Starry%252520Night.jpg&,
&/-KtLJ3k858eY/URqvC_2h_bI/AAAAAAAAAbs/zzEBImwDA_g/s160-c/Stream.jpg&,
&/-dFB7Lad6RcA/URqvDUftwWI/AAAAAAAAAbs/BrhoUtXTN7o/s160-c/Strip%252520Sunset.jpg&,
&/-at6apgFiN20/URqvDyffUZI/AAAAAAAAAbs/clABCx171bE/s160-c/Sunset%252520Hills.jpg&,
&/-7-EHhtQthII/URqvEYTk4vI/AAAAAAAAAbs/QSJZoB3YjVg/s160-c/Tenaya%252520Lake%2525202.jpg&,
&/-8MrjV_a-Pok/URqvFC5repI/AAAAAAAAAbs/9inKTg9fbCE/s160-c/Tenaya%252520Lake.jpg&,
&/-B1HW-z4zwao/URqvFWYRwUI/AAAAAAAAAbs/8Peli53Bs8I/s160-c/The%252520Cave%252520BW.jpg&,
&/-PO4E-xZKAnQ/URqvGRqjYkI/AAAAAAAAAbs/42nyADFsXag/s160-c/The%252520Fisherman.jpg&,
&/-iLyZlzfdy7s/URqvG0YScdI/AAAAAAAAAbs/1J9eDKmkXtk/s160-c/The%252520Night%252520is%252520Coming.jpg&,
&/-G-k7YkkUco0/URqvHhah6fI/AAAAAAAAAbs/_taQQG7t0vo/s160-c/The%252520Road.jpg&,
&/-h-ALJt7kSus/URqvIThqYfI/AAAAAAAAAbs/ejiv35olWS8/s160-c/Tokyo%252520Heights.jpg&,
&/-Hy9k-TbS7xg/URqvIjQMOxI/AAAAAAAAAbs/RSpmmOATSkg/s160-c/Tokyo%252520Highway.jpg&,
&/-83oOvMb4OZs/URqvJL0T7lI/AAAAAAAAAbs/c5TECZ6RONM/s160-c/Tokyo%252520Smog.jpg&,
&/-FB-jfgREEfI/URqvJI3EXAI/AAAAAAAAAbs/XfyweiRF4v8/s160-c/Tufa%252520at%252520Night.jpg&,
&/-vngKD5Z1U8w/URqvJUCEgPI/AAAAAAAAAbs/ulxCMVcU6EU/s160-c/Valley%252520Sunset.jpg&,
&/-DOz5I2E2oMQ/URqvKMND1kI/AAAAAAAAAbs/Iqf0IsInleo/s160-c/Windmill%252520Sunrise.jpg&,
&/-biyiyWcJ9MU/URqvKculiAI/AAAAAAAAAbs/jyPsCplJOpE/s160-c/Windmill.jpg&,
&/-PDT167_xRdA/URqvK36mLcI/AAAAAAAAAbs/oi2ik9QseMI/s160-c/Windmills.jpg&,
&/-kI_QdYx7VlU/URqvLXCB6gI/AAAAAAAAAbs/N31vlZ6u89o/s160-c/Yet%252520Another%252520Rockaway%252520Sunset.jpg&,
&/-e9NHZ5k5MSs/URqvMIBZjtI/AAAAAAAAAbs/1fV810rDNfQ/s160-c/Yosemite%252520Tree.jpg&, };
}package com.example.
import java.io.IOE
import java.net.HttpURLC
import java.net.URL;
import java.util.concurrent.ExecutorS
import java.util.concurrent.E
import android.content.C
import android.graphics.B
import android.graphics.BitmapF
import android.os.H
import android.os.M
import android.support.v4.util.LruC
public class ImageDownLoader {
* 缓存Image的类,当存储Image的大小大于LruCache设定的值,系统自动释放内存
private LruCache&String, Bitmap& mMemoryC
* 操作文件相关类对象的引用
private FileUtils fileU
* 下载Image的线程池
private ExecutorService mImageThreadPool =
public ImageDownLoader(Context context){
//获取系统分配给每个应用程序的最大内存,每个应用系统分配32M
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int mCacheSize = maxMemory / 8;
//给LruCache分配1/8 4M
mMemoryCache = new LruCache&String, Bitmap&(mCacheSize){
//必须重写此方法,来测量Bitmap的大小
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
fileUtils = new FileUtils(context);
* 获取线程池的方法,因为涉及到并发的问题,我们加上同步锁
public ExecutorService getThreadPool(){
if(mImageThreadPool == null){
synchronized(ExecutorService.class){
if(mImageThreadPool == null){
//为了下载图片更加的流畅,我们用了2个线程来下载图片
mImageThreadPool = Executors.newFixedThreadPool(2);
return mImageThreadP
* 添加Bitmap到内存缓存
* @param key
* @param bitmap
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null && bitmap != null) {
mMemoryCache.put(key, bitmap);
* 从内存缓存中获取一个Bitmap
* @param key
public Bitmap getBitmapFromMemCache(String key) {
return mMemoryCache.get(key);
* 先从内存缓存中获取Bitmap,如果没有就从SD卡或者手机缓存中获取,SD卡或者手机缓存
* 没有就去下载
* @param url
* @param listener
public Bitmap downloadImage(final String url, final onImageLoaderListener listener){
//替换Url中非字母和非数字的字符,这里比较重要,因为我们用Url作为文件名,比如我们的Url
//是Http://xiaanming/abc.用这个作为图片名称,系统会认为xiaanming为一个目录,
//我们没有创建此目录保存文件就会报错
final String subUrl = url.replaceAll(&[^\\w]&, &&);
Bitmap bitmap = showCacheBitmap(subUrl);
if(bitmap != null){
final Handler handler = new Handler(){
public void handleMessage(Message msg) {
super.handleMessage(msg);
listener.onImageLoader((Bitmap)msg.obj, url);
getThreadPool().execute(new Runnable() {
public void run() {
Bitmap bitmap = getBitmapFormUrl(url);
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
//保存在SD卡或者手机目录
fileUtils.savaBitmap(subUrl, bitmap);
} catch (IOException e) {
e.printStackTrace();
//将Bitmap 加入内存缓存
addBitmapToMemoryCache(subUrl, bitmap);
* 获取Bitmap, 内存中没有就去手机或者sd卡中获取,这一步在getView中会调用,比较关键的一步
* @param url
public Bitmap showCacheBitmap(String url){
if(getBitmapFromMemCache(url) != null){
return getBitmapFromMemCache(url);
}else if(fileUtils.isFileExists(url) && fileUtils.getFileSize(url) != 0){
//从SD卡获取手机里面获取Bitmap
Bitmap bitmap = fileUtils.getBitmap(url);
//将Bitmap 加入内存缓存
addBitmapToMemoryCache(url, bitmap);
* 从Url中获取Bitmap
* @param url
private Bitmap getBitmapFormUrl(String url) {
Bitmap bitmap =
HttpURLConnection con =
URL mImageUrl = new URL(url);
con = (HttpURLConnection) mImageUrl.openConnection();
con.setConnectTimeout(10 * 1000);
con.setReadTimeout(10 * 1000);
con.setDoInput(true);
con.setDoOutput(true);
bitmap = BitmapFactory.decodeStream(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
con.disconnect();
* 取消正在下载的任务
public synchronized void cancelTask() {
if(mImageThreadPool != null){
mImageThreadPool.shutdownNow();
mImageThreadPool =
* 异步下载图片的回调接口
* @author len
public interface onImageLoaderListener{
void onImageLoader(Bitmap bitmap, String url);
package com.example.
import android.content.C
import android.graphics.B
import android.view.V
import android.view.ViewG
import android.widget.AbsListV
import android.widget.AbsListView.OnScrollL
import android.widget.BaseA
import android.widget.GridV
import android.widget.ImageV
import com.example.asyncimageloader.ImageDownLoader.onImageLoaderL
public class ImageAdapter extends BaseAdapter implements OnScrollListener{
* 上下文对象的引用
* Image Url的数组
private String [] imageThumbU
* GridView对象的应用
private GridView mGridV
* Image 下载器
private ImageDownLoader mImageDownL
* 记录是否刚打开程序,用于解决进入程序不滚动屏幕,不会下载图片的问题。
* 参考http://blog.csdn.net/guolin_blog/article/details/9526203#comments
private boolean isFirstEnter =
* 一屏中第一个item的位置
private int mFirstVisibleI
* 一屏中所有item的个数
private int mVisibleItemC
public ImageAdapter(Context context, GridView mGridView, String [] imageThumbUrls){
this.context =
this.mGridView = mGridV
this.imageThumbUrls = imageThumbU
mImageDownLoader = new ImageDownLoader(context);
mGridView.setOnScrollListener(this);
public void onScrollStateChanged(AbsListView view, int scrollState) {
//仅当GridView静止时才去下载图片,GridView滑动时取消所有正在下载的任务
if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
showImage(mFirstVisibleItem, mVisibleItemCount);
cancelTask();
* GridView滚动的时候调用的方法,刚开始显示GridView也会调用此方法
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mFirstVisibleItem = firstVisibleI
mVisibleItemCount = visibleItemC
// 因此在这里为首次进入程序开启下载任务。
if(isFirstEnter && visibleItemCount & 0){
showImage(mFirstVisibleItem, mVisibleItemCount);
isFirstEnter =
public int getCount() {
return imageThumbUrls.
public Object getItem(int position) {
return imageThumbUrls[position];
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
ImageView mImageV
final String mImageUrl = imageThumbUrls[position];
if(convertView == null){
mImageView = new ImageView(context);
mImageView = (ImageView) convertV
mImageView.setLayoutParams(new GridView.LayoutParams(150, 150));
mImageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
//给ImageView设置Tag,这里已经是司空见惯了
mImageView.setTag(mImageUrl);
/*******************************去掉下面这几行试试是什么效果****************************/
Bitmap bitmap = mImageDownLoader.showCacheBitmap(mImageUrl.replaceAll(&[^\\w]&, &&));
if(bitmap != null){
mImageView.setImageBitmap(bitmap);
mImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_empty));
/**********************************************************************************/
return mImageV
* 显示当前屏幕的图片,先会去查找LruCache,LruCache没有就去sd卡或者手机目录查找,在没有就开启线程去下载
* @param firstVisibleItem
* @param visibleItemCount
private void showImage(int firstVisibleItem, int visibleItemCount){
Bitmap bitmap =
for(int i=firstVisibleI i&firstVisibleItem + visibleItemC i++){
String mImageUrl = imageThumbUrls[i];
final ImageView mImageView = (ImageView) mGridView.findViewWithTag(mImageUrl);
bitmap = mImageDownLoader.downloadImage(mImageUrl, new onImageLoaderListener() {
public void onImageLoader(Bitmap bitmap, String url) {
if(mImageView != null && bitmap != null){
mImageView.setImageBitmap(bitmap);
//if(bitmap != null){
// mImageView.setImageBitmap(bitmap);
// mImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_empty));
* 取消下载任务
public void cancelTask(){
mImageDownLoader.cancelTask();
package com.example.
import android.app.A
import android.os.B
import android.view.M
import android.view.MenuI
import android.widget.GridV
import android.widget.T
public class MainActivity extends Activity {
private GridView mGridV
private String [] imageThumbUrls = Images.imageThumbU
private ImageAdapter mImageA
private FileUtils fileU
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileUtils = new FileUtils(this);
mGridView = (GridView) findViewById(R.id.gridView);
mImageAdapter = new ImageAdapter(this, mGridView, imageThumbUrls);
mGridView.setAdapter(mImageAdapter);
protected void onDestroy() {
mImageAdapter.cancelTask();
super.onDestroy();
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(&删除手机中图片缓存&);
return super.onCreateOptionsMenu(menu);
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
fileUtils.deleteFile();
Toast.makeText(getApplication(), &清空缓存成功&, Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
tools:context=&.MainActivity& &
android:id=&@+id/gridView&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:stretchMode=&columnWidth&
android:columnWidth=&90dip&
android:verticalSpacing=&10dip&
android:horizontalSpacing=&10dip&
android:cacheColorHint=&@android:color/transparent&
android:numColumns=&auto_fit& &
&/GridView&
&/RelativeLayout&&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /& &&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2068955次
积分:16741
积分:16741
排名:第280名
原创:60篇
转载:15篇
评论:3563条
Android 技术讨论群
我的联系方式
文章:16篇
阅读:365703
(3)(1)(1)(1)(1)(3)(4)(4)(2)(2)(5)(6)(10)(8)(15)(4)(2)(1)(2)

我要回帖

更多关于 相册不显示sd卡照片 的文章

 

随机推荐