将一个图片通过写入外部存储后,打开系统图库找不到该图片,因为系统图库属于多媒体库,我们保存图片后未通知多媒体扫描,所以看不到保存的图片了
4.4以下可以通过发送广播通知多媒体库自动扫描,filePath是图片保存的完整路径
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));
4.4 Android把系统广播的权限回收了,只有系统应用才可以发送系统广播 所以4.4以上可以通过 MediaScannerConnection,都会通过这种方式告诉MediaProvider同步媒体数据库。
封装 自定义MediaScanner
public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
/**
* 扫描对象
*/
private MediaScannerConnection mediaScanConn = null;
public MediaScanner(Context context) {
//实例化
mediaScanConn = new MediaScannerConnection(context, this);
}
/**文件路径集合**/
private String[] filePaths;
/**文件MimeType集合**/
private String[] mimeTypes;
/**
* 扫描文件
* @author YOLANDA
* @param mimeTypes
*/
public void scanFiles(String[] filePaths, String[] mimeTypes) {
this.filePaths = filePaths;
this.mimeTypes = mimeTypes;
mediaScanConn.connect();//连接扫描服务
}
/**
* @author YOLANDA
*/
@Override
public void onMediaScannerConnected() {
for (int i = 0; i < filePaths.length; i++) {
mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//服务回调执行扫描
}
filePaths = null;
mimeTypes = null;
}
private int scanTimes = 0;
/**
* 扫描一个文件完成
* @author YOLANDA
* @param path
* @param uri
*/
@Override
public void onScanCompleted(String path, Uri uri) {
scanTimes ++;
if(scanTimes == filePaths.length) {//如果扫描完了全部文件
mediaScanConn.disconnect();//断开扫描服务
scanTimes = 0;//复位计数
}
}
}
当图片保存好后,通过MediaScanner更新媒体库
MediaScanner mediaScanner = new MediaScanner(this);
String[] filePaths = new String[]{filePath};
String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")};
mediaScanner.scanFiles(filePaths, mimeTypes);
分享到:
相关推荐
在Android开发中,将图片和视频保存到本地设备并更新系统图库是常见的需求。以下是一些关于这个主题的关键知识点: 1. **保存图片到本地**: - 使用`File`类创建一个新文件,指定存储路径(如SD卡或内部存储)。 ...
在Android平台上,将图片保存到系统图库是常见的操作,特别是在开发涉及图像处理的应用时。以下是一些关于这个主题的关键知识点: 1. **权限管理**: 在Android 6.0(API级别23)及以上版本,应用需要请求运行时...
Android系统自带的图库源码是开发者深入了解Android平台图片管理和展示机制的重要参考资料,适用于Android 2.3(Gingerbread)及以上版本。这个源码包含了Android系统如何处理图像选择、预览、组织以及用户交互的...
android系统APP日志写入本地保存
Android系统图库是Android操作系统中一个重要的组成部分,主要用于管理和展示用户设备上的图片和视频。Gallery3D是Android早期的一个开源图库应用,它为用户提供了一个高效、流畅且功能丰富的图像浏览体验。在这个...
- 获取图库图片通常通过启动一个`Intent`,设置`ACTION_PICK`或`ACTION_GET_CONTENT`,让用户选择一张现有的图片。`GetpicUtil`可能有一个`startGalleryIntent()`方法来实现这个功能。 6. **处理图库选择的结果**...
- 保存文件:使用FileOutputStream将Workbook对象写入到本地文件系统。 4. **Android权限**:在AndroidManifest.xml文件中,需要添加读写外部存储的权限: ```xml <uses-permission android:name="android....
该项目主要功能是将数据写入到word中,需要的同志可以下载看看,项目中需要的jar包可在 http://download.csdn.net/detail/linzhenxiang123/9717253 进行下载
本文将详细介绍如何在Android中实现Excel文件的读取与写入。 首先,Android系统本身并不直接支持Excel文件的操作,因此我们需要引入第三方库来实现这一功能。常用的库有Apache POI,这是一个用于处理Microsoft ...
在Android系统中,图库应用是用户管理和浏览照片、视频的关键组件。这个“Android系统软件图库源码”提供了一个深入了解图库应用内部工作原理的机会,对于开发者来说是一份宝贵的资源。通过分析和学习这份源码,我们...
在提供的压缩包文件中,`QQ截图*.png`可能是展示Android Studio项目设置或代码片段的图片,而`教程说明见这里.txt`可能包含了更详细的步骤或注意事项,`SDcardDemo`可能是包含示例代码的Java类。请参考这些资源以...
在Android应用开发中,调用系统相机和相册是常见的需求,这通常涉及到用户与设备媒体库的交互。本文将详细讲解如何不依赖第三方库,仅使用Android原生API实现拍照和图片多选功能。 首先,调用系统相机拍摄照片。在...
这篇内容将深入讲解如何在Android应用程序中实现U盘插拔的监听以及解决U盘写入权限的问题。 首先,我们需要了解Android的USB主机模式(USB Host Mode)。在Android 3.1及以上版本,系统支持USB主机模式,允许设备...
4. **图片加载到ImageView**:下载完成后的图片数据,可以使用`Glide`、`Picasso`或`Universal Image Loader`等库加载到ImageView中。这些库能自动处理图片的缩放和裁剪,避免内存泄漏。 5. **图库集成**:为了让...
在Android系统中,U盘(USB存储设备)的插拔监听和写入权限管理是开发者在处理外部存储设备时常见的需求。这篇详细版教程将帮助你理解如何在Android应用中实现这些功能。首先,我们来看一下如何监听U盘的插入和移除...
总结,Android Studio 3.2中的"Android 逐行写入和读取文本文件Demo"涵盖了基本的文件操作概念,包括文件流的获取、缓冲流的使用以及文件的读写方法。这些知识对于任何Android开发者来说都是基础且重要的。通过实践...
在Android中,可以使用如Glide、Picasso这样的图片加载库来展示图片,但选择图片通常需要集成第三方库,如`androidx.core.app.ActivityCompat.startActivityForResult()`来启动系统图库,让用户选择图片。在iOS中,...
在Android中,通常会将图片保存到公共的外部存储目录,这样系统相册应用可以检测到并显示出来: ```java private void saveImageToGallery(byte[] imageData) { File storageDir = Environment....
在Android系统中,U盘通常默认只支持读取操作,而不允许进行写入,这是因为出于安全和稳定性考虑,Android设备通常会限制外部USB设备的写入权限。然而,通过一些技术手段,我们可以使Android设备的U盘具备写入功能。...
由于google Android 4.4版本之后,系统默认SD卡对应用程序不授予写权限,导致应用程序不能往SD卡中写入文件,需要对默认的系统进行重新设置。 操作的详细步骤以及用到的全部辅助工具(先Root后打开SD卡写权限,...