系统: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删除多媒体文件)的更多相关文章

  1. android源码中,在系统多媒体数据库中增加一个字段

    由于项目需求,在系统多媒体管理数据库里的存储图像文件的表中需要新增加一个字段,源码在:项目\packages\providers\MediaProvider\MediaProvider.java下,在 ...

  2. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  3. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...

  4. Android之路-------浅淡Android历史、系统架构与开发特色

    前言 离上一篇发表的博客差不多有两个星期了吧,相信有些博友差点就对LP失望了,因为上一篇博文中说了,这次不管怎样,LP都会坚持写博客的. 由于工作关系LP才隔了这么久才再次发表博文,这篇博文主要是总结 ...

  5. Android app中的so库和CPU架构

    一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...

  6. Android特性与系统架构

    Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...

  7. [Android 新特性] 改进明显 Android 4.4系统新特性解析

    Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的 ...

  8. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  9. 文件件监听器,android系统拍照功能调用后删除系统生成的照片

    先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...

随机推荐

  1. 一起来做webgame,《卡片魔兽》(一)基础战斗

    写在前面的话 这不是教程,只是博主在娱乐过程中的一些小结记录.博主水平有限,没有什么高级的东西,只是将一些小的知识点结合一下,做这么一个养成类型的卡片页面游戏(=.=!有点绕).做一个完整的游戏,涉及 ...

  2. BZOJ 3365 Distance Statistics 点分治

    这道题是一道点分治的题目,难度不大,可以拿来练手. 关键是对于找出来的重心的删除操作需要删掉这条边,这很重要. 还有每次找重心的时候,不但要考虑他的子节点的siz,还要考虑父节点的siz. 然后就A了 ...

  3. MySQL:动态开启慢查询日志(Slow Query Log)

    前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 ...

  4. git review出现的问题

    在提交代码review的时候可能会出现 Could not connect to gerrit.Enter your gerrit username: xxxxTrying again with ss ...

  5. ansible 安装

    1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署. ...

  6. python-高阶函数

    map函数 map(func, Iterable) , 返回一个Iterable的map对象 reduce函数 reduce(func,Iterable), 将后面可迭代对象的每个元素都作用于函数(函 ...

  7. IO复用三种方式

    简介 IO复用技术,简单来说就是同时监听多个描述符.在没有用到IO复用以前,只能是一个线程或一个 线程去监听,服务端同时有多个连接的时候,需要创建多个线程或者进程.而且,并不是所有的连 接是一直在传输 ...

  8. JS笔记一

    最近有时间,觉得应该整理一下,额,就从很久之前的基础开始吧,正好也巩固下,菜鸟需要扎实基础. 下面是一个简单的调查表,因为没有写任何样式,所以就是简单的表单输入框之类的.选择“男”或者“女”时,会出现 ...

  9. AsyncTask内的各个方法调用顺序

    |- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作. ...

  10. [Python笔记]序列(一)索引、分片

    Python包含6种内建序列:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象. 这些序列支持通用的操作: 索引 索引是从0开始计数:当索引值为负数时,表示从最后一个元素( ...