android应用刷新系统多媒体库(增加or删除多媒体文件)
系统:android4.4及其以上
功能:app中拍照, 并实现浏览、删除照片操作。
实现:
1.拍照,存储到指定路径path
2.通知系统多媒体数据库刷新数据。
主要使用MediaScannerConnection,该类向应用提供了将新增多媒体文件发送给多媒体扫描服务的方法,进而将数据写入到系统多媒体数据库,参考实现如下:
public class MediaScanner {
private MediaScannerConnection mediaScanConn = null;
private PhotoSannerClient client = null;
private String filePath = null;
private String fileType = null;
private static MediaScanner mediaScanner= null;
/**
* 然后调用MediaScanner.scanFile("/sdcard/2.mp3");
* */
public MediaScanner(Context context) {
// 创建MusicSannerClient
if (client == null) {
client = new PhotoSannerClient();
}
if (mediaScanConn == null) {
mediaScanConn = new MediaScannerConnection(context, client);
}
}
public static MediaScanner getInstanc(Context context){
if (mediaScanner==null){
mediaScanner = new MediaScanner(context);
}
return mediaScanner;
}
private class PhotoSannerClient implements
MediaScannerConnection.MediaScannerConnectionClient {
public void onMediaScannerConnected() {
if (filePath != null) {
mediaScanConn.scanFile(filePath, fileType);
}
filePath = null;
fileType = null;
}
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
mediaScanConn.disconnect();
}
}
/**
* 扫描文件标签信息
*
* @param filePath
* 文件路径 eg:/sdcard/MediaPlayer/dahai.mp3
* @param fileType
* 文件类型 eg: audio/mp3 media/* application/ogg
* */
public void scanFile(String filepath, String fileType) {
this.filePath = filepath;
this.fileType = fileType;
// 连接之后调用MusicSannerClient的onMediaScannerConnected()方法
mediaScanConn.connect();
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
}
3.删除照片, 并删除多媒体数据库中的相关内容。对于删除操作, 都可以通过content provider直接操作多媒体数据库执行删除,参考代码如下:
if (file.isFile()) {
String filePath = file.getPath();
if(filePath.endsWith(".mp4")){
int res = context.getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media.DATA + "= \"" + filePath+"\"",
null);
if (res>0){
file.delete();
}else{
Log.e(TAG, "删除文件失败");
}
}else if (filePath.endsWith(".jpg")||filePath.endsWith(".png")||filePath.endsWith(".bmp")){
int res = context.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media.DATA + "= \"" + filePath+"\"",
null);
if (res>0){
file.delete();
}else{
Log.e(TAG, "删除文件失败");
}
}else{
file.delete();
}
//删除多媒体数据库中的数据
return;
}
android应用刷新系统多媒体库(增加or删除多媒体文件)的更多相关文章
- android源码中,在系统多媒体数据库中增加一个字段
由于项目需求,在系统多媒体管理数据库里的存储图像文件的表中需要新增加一个字段,源码在:项目\packages\providers\MediaProvider\MediaProvider.java下,在 ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
- Android之路-------浅淡Android历史、系统架构与开发特色
前言 离上一篇发表的博客差不多有两个星期了吧,相信有些博友差点就对LP失望了,因为上一篇博文中说了,这次不管怎样,LP都会坚持写博客的. 由于工作关系LP才隔了这么久才再次发表博文,这篇博文主要是总结 ...
- Android app中的so库和CPU架构
一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...
- Android特性与系统架构
Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...
- [Android 新特性] 改进明显 Android 4.4系统新特性解析
Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的 ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- 文件件监听器,android系统拍照功能调用后删除系统生成的照片
先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...
随机推荐
- JAVA算法
一.归并排序 归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并 ...
- Spring的IOC原理(转载)
在网上看到一篇文章,感觉写得挺不错的,转载一下,本文转载自:http://www.cnblogs.com/xdp-gacl/p/3707631.html 一. IoC理论的背景 我们都知道,在采用面向 ...
- js 时间函数封装
html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- C++ 函数形参发生动态绑定时指针增长步长与静态类型一致
牛客网上的题: class A { public: long a; }; class B : public A { public: long b; }; void seta1(A* data, int ...
- 使用OpenSSL为支付宝生成RSA私钥
通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具)打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...
- iOS 9后修改状态栏方法
1.plist文件中添加View controller-based status bar appearance字段 值为NO 2.程序中添加 [UIApplication sharedApplicat ...
- [CC]点云密度计算
包括两种计算方法:精确计算和近似计算(思考:local density=单位面积的点数 vs local density =1/单个点所占的面积) 每种方法可以实现三种模式的点云密度计算,CC里面的 ...
- JS Util1(basic)
1.
- LUA5.3的BNF范式学习笔记
BNF巴科斯范式 {A} 表示 0 或多个 A , [A] 表示一个可选的 A chunk ::= block block ::= {stat} [retstat] stat ::= ‘;’ ...
- rosetta2014/2015安装时出现INCLUDE(keyerror)错误,解决。
错误: KeyError: 'INCLUDE' 使编译出错 解决方法: [usrname@host source]$ vim tools/build/site.settings 注释# "i ...