当前位置:首页 » 安卓系统 » android图片缓存到本地

android图片缓存到本地

发布时间: 2022-05-01 07:47:03

A. android开发文件缓存在什么位置,可以在应用程序中清除。

android开发文件缓存的默认位置一般是在android/data目录下,比如kindle(1st)是在/mnt/sdcard/Android/data目录下,魅族是在/sdcard/Android/data目录下。
将缓存在应用程序中清除:
打开关闭使用缓存,一共有五个种类
//优先使用缓存:
WebView.getSettings().setCacheMod
(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
在退出应用的时候加上如下代码
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete(); }
file.delete(); }
context.deleteDatabase("WebView.db");
context.deleteDatabase("WebViewCache.db");
以上方法均可实现。

B. Android 将ImageView中的图片保存到本地

从网络上获取的图片。你可以获得图片image对象的话,就可以保存了。

C. Android 保存图片到本地。

这里只介绍按下“保存”后如何将一个Bitmap对象保存为图片文件的执行步骤,对图片的下载,图片到Bitmap对象的转换,Bitmap对象的格式转换和压缩,以及界面设计部分全部都忽略了。

  • 确定存储路径

  • 获取外部存储权限

  • 确定外部存储状态

  • 确定文件名

  • 保存到文件中

  • 发送广播,通知系统扫描保存后的文件

  • 确定存储路径

    在Android中文件存储路径包括内部存储和外部存储两种类型。

    对内部存储,当一个app被安装到手机后,Android系统会在内部存储的/data/data/目录下创建一个以包名称命名的文件夹。例如/data/data/com.sohu.inputmethod.sogou/。一个应用对内部存储的所有访问都被限制在这个文件夹中,也就是说Android应用只能在该目录中读取,创建,修改文件。对该目录之外的其他内部存储中的目录都没有任何操作的权限。因此,如果将图片保存在内部存储中,只能被应用自身读取,其他应用均无法读取。如果需要让系统图库,相册或其他应用能够找到保存的图片,必须将图片保存到外部存储中。

    对外部存储,当一个app被安装到手机后,Android系统会在外部存储的/Android/data/目录下创建一个以包名命名的文件夹(这里第一个/不是根路径,而是相对外部存储所挂载路径的相对路径)。例如/storage/emulated/0/Android/data/com.sohu.inputmethod/。这个路径同样只能被应用自身读取,其他应用不能访问。因此,也不能将图片保存在这个目录中。

    除外部存储的/Android目录之外的其他目录一般都是可以被其他应用访问的。目前,大多数应用都会在外部存储的根路径下建立一个类似包名的多层目录,以存储需要共享的文件。例如/storage/emulated/0/sogou/image/。还需要注意的是,很多查看图片的应用都支持按照文件夹来查看图片。如果将图片所在的文件夹取名为image,photo之类的,就无法和其他文件夹区分开,用户也不能识别该文件夹的用途。因此最好取一个有区分度的文件夹名字,例如网络贴吧就保存在/tieba目录,微信是保存在/tencent/MicroMsg/WeiXin目录。

    由于Android系统的碎片化问题,不同设备上外部存储的路径很可能会不同,因此,不能直接使用/storage/emulated/0/作为外部存储的根路径。
    Android SDK中 Environment类 提供了getExternalStorageDirectory()方法来获取外部存储的根路径。示例如下:

    [java]view plain

  • Stringdir=Environment.getExternalStorageDirectory().getAbsolutePath()+"/tencent/MicroMsg/WeiXin/"

  • 需要注意的是Environment.getExternalStorageDirectory()返回的路径中最后一个字符不是/,如果需要创建子目录,需要在子目录的前后都加上/。

    获取外部存储权限

    由于需要在外部存储中写文件,需要在AndroidManifest.xml中增加如下的权限声明。

    [java]view plain

  • <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  • 确定外部存储状态

    由于外部存储需要被挂载,也可以被卸载,在写入文件之前,需要先判断外部存储的状态是否正常。只有状态正常情况下才可以执行保存文件的操作。获取外部存储状态同样是通过Environment类,通过Environment.getExternalStorageState()可以得到一个字符串,来表示外部存储的状态。同时在Environment类中定义了一系列的String常量表示不同的状态。在所有的状态中只有内部存储处于Environment.MEDIA_MOUNTED状态时才可以读写文件,因此,需要将获取到的状态和Environment.MEDIA_MOUNTED做比较,如果不是Environment.MEDIA_MOUNTED状态,就返回保存失败。示例如下。

    [java]view plain

  • //获取内部存储状态

  • Stringstate=Environment.getExternalStorageState();

  • //如果状态不是mounted,无法读写

  • if(!state.equals(Environment.MEDIA_MOUNTED)){

  • return;

  • }



  • 确定文件名

    保存的图片文件名可以由应用根据自身需要自行确定,一般来说需要有一个命名规则,然后根据命名规则计算得到文件名。
    这里列举几种常见的命名规则。

  • 随机命名
    这种命名规则是随机生成一个字符串或一组数字来对图片命名。
    字符串可以通过UUID来生成,数字可以通过Random()类来生成,例如:

    [java]view plain

  • //通过UUID生成字符串文件名

  • StringfileName1=UUID.randomUUID().toString();

  • //通过Random()类生成数组命名

  • Randomrandom=newRandom();

  • StringfileName2=String.valueOf(random.nextInt(Integer.MAX_VALUE));

  • 这种命名规则是按照数字从小到大的顺序来对图片命名。
    在程序启动时先获取图片文件名中当前最大数字的文件名,之后每保存一张图片就将数字加1即可。

  • 时间命名
    这种命名规则是根据保存图片的当前系统时间来对图片命名。
    系统时间可以通过System.currentTimeMillis()来获取,不过System.currentTimeMillis()获取到的时间是一个long型的整数,如果用它做文件名,无法通过文件名直接看出文件的具体保存时间。可以通过SimpleDateFormat先对当前时间做格式化,然后再将其作为文件名来使用。例如:

    [java]view plain

    使用这种命名规则来命名需要注意的是同一秒钟可能会有多张图片需要保存,在得到当前系统时间对应的文件名后,需要判断该文件是否存在。如果文件已经存在,需要重新生成文件名。重新生成的文件名可以在之前的文件名后加上一个随机数后缀,或者是用毫秒数做后缀。

  • Calendarnow=newGregorianCalendar();

  • SimpleDateFormatsimpleDate=newSimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault());

  • StringfileName=simpleDate.format(now.getTime());

  • 文件URL命名
    每张网络图片都有一个对应的图片URL,可以根据图片的URL来对图片命名。
    不过URL中会包含一些不能用作文件名的特殊字符,此外直接用URL来命名可能会带来安全问题。为了避免这两个问题,可以将图片URL的MD5值作为文件名来使用。由于MD5是不可逆的,也就无法通过MD5值反向得到图片URL,同时MD5值对应的字符串只包含[0-9A-Z],不包含特殊字符,可是作为文件名使用。
    由于每张图片的URL是唯一的,其对应的文件名也就是唯一的。如果需要每张网络图片只能生成一个文件,不允许保存为多份拷贝,可以用这种命名规则。在得到URL对应的文件名后,先判断文件是否已经存在,如果已经存在,直接覆盖或不处理。

  • 保存到文件中

    保存图片文件时,通过Bitmap的compress()方法将Bitmap对象压缩到一个文件输出流中,然后flush()即可。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 发送广播,通知系统扫描保存后的文件

    至此,已经实现将Bitmap对象保存成外部存储中的一个jpg格式的文件。但此时该文件只是保存在外部存储的一个目录中,必须进入其所在的目录中才可以看到。在系统图库,相册和其他应用中无法看到新建的图片文件。为了让其他应用能够知道图片文件被创建,必须通知MediaProvider服务将新建的文件添加到图片数据库中。

    Android系统中常驻一个MediaProvider服务,对应的进程名为android.process.media,此服务用来管理本机上的媒体文件,提供媒体管理服务。在系统开机或者收到外部存储的挂载消息后,MediaProvider会调用MediaScanner,MediaScanner会扫描外部存储中的所有文件,根据文件类型的后缀将文件信息保存到对应的数据库中,供其他APP使用。

    MediaScannerReceiver是一个广播接收者,当它接收到特定的广播请求后,就会去扫描指定的文件,并根据文件信息将其添加到数据库中。当图片文件被创建后,就可以发送广播给MediaScannerReceiver,通知其扫描新建的图片文件。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • //保存图片后发送广播通知更新数据库

  • Uriuri=Uri.fromFile(file);

  • sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 图片的异步保存

    保存图片文件时,如果图片很大,或需要同时保存多张图片时,就需要较多的时间。为了避免阻塞UI线程,出现帧率下降或ANR,通常需要将图片保存操作放到线程中去执行。当图片保存完毕后通过sendMessage()方法通知UI线程保存结果。
    将图片保存放到后台线程去执行需要增加一些同步机制避免一些多线程问题。例如有两张图片需要保存,分别放到两个线程中去执行,保存图片时文件名以数字顺序增加。第一个线程选中文件名为125.jpg,但此时文件还未创建,第二个线程判断125.jpg不存在,于是也选取125.jpg作为文件名,两张图片就保存到同一个文件中了。

D. android缓存数据到本地放在哪儿最好

Android应用开发中,给我们提供了5种数据的存储方式
1 使用SharedPreferences存储数 据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据

以下是这几中数据存储方式的说明用及法:

第一种: 使用SharedPreferences存储数据
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。

第二种: 文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/< >/files/***.***。

第三种: SQLite数据库存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,
并且只利用很少的内存就有很好的性能。
此外它还是开源的,任何人都可以使用它。
许多开源项目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。
SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

第四种 使用ContentProvider存储数据 ContentProvider其实也是通过数据库的方式来存储数据的,因此这里不再做详细介绍

第五种 网络存储数据 也就是说将数据保存在服务器,android上只需要通过httpclient发起一个请求,向服务器获取数据即可
应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

E. android中人脸识别扫描人然后怎样将图像保存到本地数据库

用AndroidSDK中的Face
Detector实现人脸识别
流程是这样的:
1.
读取一张图片至Bitmap
(从Resource中,或是从手机相册中选取)
2.
使用FaceDetector
API分析Bitmap,将探测到的人脸数据以FaceDetector.Face存储在一个Face
list中;
3.将人脸框显示在图片上。

F. android文件缓存的方法具体怎么实现

你好,你想缓存什么?如果是缓存图片。。在第一次下载的时候,保存到SD卡,下次下载前从SD读取同名文件,如果存在就直接从文件读取,这样就实现了缓存。谢谢。

G. android关于网络上获取图片后保存在本地的问题

private InputStream ins = null;

....

HttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(server_path_up);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httppost);
HttpEntity entity = response.getEntity();

ins = entity.getContent();

这个ins是一个数据流,然后通过BitmapFactory.decodeStream(ins)就可以得到这个图片了。得到图片后保存到sd卡上,也是通过数据流保存,方法雷同。

H. 安卓系统图片缓存

安卓系统中相机和图片的缓存文件,该文件一般会占用内存很大,小的几百M,大的话则会有1.5G~7.5G左右,而且此文件还会无限制的扩大,删除后还是死灰复燃。是比较困扰用户的一个问题。
功能:
为相机和图片库提供缓存,在用管理类软件扫描的时候也会提示为缩略图缓存文件,删除后会使相机和图片库等功能变得很卡,甚至崩溃。

解决方案:
1将所有软件安装移动至SD卡。
2直接删除,但是下次依然缓存。
3删除后,注意多次清理,保证顺畅。

I. android本地缓存图片最大取多大的空间较为

相册图片预取缓存策略是内存缓存(硬引用LruCache、软引用SoftReference<Bitmap>)、外部文件缓存(context.getCachedDir()),缓存中取不到的情况下再向服务端请求下载图片。同时缓存三张图片(当前预览的这张,前一张以及后一张)。1.内存缓存//需要导入外部jar文件 android-support-v4.jar
import android.support.v4.util.LruCache;
//开辟8M硬缓存空间
private final int hardCachedSize = 8*1024*1024;
//hard cache
private final LruCache<String, Bitmap> sHardBitmapCache = new LruCache<String, Bitmap>(hardCachedSize){
@Override
public int sizeOf(String key, Bitmap value){
return value.getRowBytes() * value.getHeight();
}
@Override
protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue){
Log.v("tag", "hard cache is full , push to soft cache");
//硬引用缓存区满,将一个最不经常使用的oldvalue推入到软引用缓存区
sSoftBitmapCahe.put(key, new SoftReference<Bitmap>(oldValue));
}
}

详细

J. Android 开发.下载多张图片保存到本地,大概9M,时间比较3~5分钟。时间太长了,用户会等太久,求解决方法

一张图片的URL想要对应多张图片基本实现不了,URL是唯一的存在,如果1个URL存在多个内容就出乱子了,除非这个URL不是JPG等结尾,而是HTML等页面格式结尾,可以把多张图片放在一个页面当中。
可以有以下几种方法:
1.将多张图片处理成长条的1张图片,保存时降低精度以减小图片大小,下载时间可缩短并节约用户流量。
2.将图片打包成一个zip包-。-手机可能无法查看

其他方法想不到了。

热点内容
qt程序一样但是无法编译 发布:2025-07-18 12:32:45 浏览:35
服务器搭建主机配置 发布:2025-07-18 12:12:43 浏览:125
ftp命令批量下载文件 发布:2025-07-18 11:58:45 浏览:743
nba2k17文件夹 发布:2025-07-18 11:48:53 浏览:871
朔源码是什么 发布:2025-07-18 11:44:33 浏览:774
迷你世界解压剧场 发布:2025-07-18 11:43:48 浏览:154
linux安装opencv 发布:2025-07-18 11:42:10 浏览:446
编程游戏的软件有哪些 发布:2025-07-18 11:41:34 浏览:956
c程序设计语言电子书 发布:2025-07-18 11:35:58 浏览:642
lightning耳机如何在安卓手机上用 发布:2025-07-18 11:21:47 浏览:176