Android 多媒体扫描 MediaScannerConnection
Android多媒体,Android多媒体扫描,Android MediaScannerConnection
2016-03-22 06:57:31
今天被 MediaScannerConnection 差点搞死了,结果只是很简单的一个问题。
ACTION_MEDIA_MOUNTED 不能使用
在 Android 4.4 之后,
ACTION_MEDIA_MOUNTED
这个广播只能由系统发出,APP 只能监听,不能广播,所以通过发送广播的方式来让系统扫描文件的做法已经是走不通了。
下面是一个老外写的。
From the SDK standpoint, this was a broadcast that developers were meant to consume, by having a BroadcastReceiver listening for it. However, many blog posts, StackOverflow answers, and the like advocated having apps send that broadcast, as it triggered a complete re-scan of external storage, for the purposes of MediaStore.
Sending such a broadcast would trigger warnings in LogCat in Android 4.3, but now, as of Android 4.4, I can confirm that your app will crash with a SecurityException for trying to send it. Instead, use MediaScannerConnection or ACTION_MEDIA_SCANNER_SCAN_FILE to request indexing of new files.
在 4.4 以后,会因为权限不够抛出运行时异常,如下:
E/AndroidRuntime(23718): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=23718, uid=10097
MediaScannerConnection 的优点
ACTION_MEDIA_MOUNTED 广播的优点是对于开发者,调用简单。缺点也是有的,一是开发者可以发送任意多次,也就是发送频率完全由开发者自己决定,二是扫描的范围也由开发者自己决定。这两个缺点容易被恶意使用,系统只能被动的接受扫描任务。另外一个缺点就是开发者拿不到扫描的结果。
MediaScannerConnection 的实现方式,从名字上大概就可以猜测出来,它是开发者 app 进程和系统扫描进程的连接器,通过它 app 进程可以调用系统扫描进程的方法,并且可以对扫描的结果进行回调。这样就可以避免了 app 进程随意触发扫描任务,也解决了 app 进程收不到扫描结果的问题了。
MediaScannerConnection 两种使用方式
创建 MediaScannerConnection 对象,调用 scanFile() 方法。
public void scanFile(String path, String mimeType)
创建 MediaScannerConnection 对象的时候需要实现 MediaScannerConnection.MediaScannerConnectionClient 接口,这个接口只有两个方法。在调用 MediaScannerConnection.connect() 方法后,MediaScannerConnectionClient 接口的 onMediaScannerConnected() 方法会被回调,然后就可以调用 MediaScannerConnection.scanFile(String,String) 方法了。在扫描完成后,MediaScannerConnectionClient 的方法 onScanCompleted(String path, Uri uri) 会被回调,在这个方法里,一般调用MediaScannerConnection.disconnect() 方法。
这个方法一次只能扫描一个文件,path 必须是一个具体的文件,不能是目录。在创建一个 MediaScannerConnection 对象后,如果要多次调用 scanFile() 方法,就不要在 onScanCompleted() 方法里调用 disconnect() 方法。
使用 MediaScannerConnection.scanFile() 静态方法。
public static void scanFile(Context context, String[] paths, String[] mimeTypes,
OnScanCompletedListener callback)
这是一个静态方法,使用就比较简单了。OnScanCompletedListener 可实现可不实现,它只有一个方法,在扫描完成的时候回调。scanFile 静态方法可以一次传递多个文件,如果 mimeTypes 不为空,就必须于 paths 的长度一致。mimeTypes 可以为空。
MimeType 的选择
今天就差点死在这里了,如果指定 MimeType ,将会使用文件的后缀名来判断文件的类型,但是千万别用 */* ,我以为使用这个它会自动判断文件的类型的,结果不是这样子的。使用 */* 的结果就是扫描完成后,相册里的东东全部没有出现在 MediaStore 里,也就是没有被当成多媒体文件扫描进多媒体数据库里。
一个完成的代码
下面的代码是我今天修改来的代码,递归实现扫描某个目录。
package com.binkery.app.filemanager.utils;
import java.io.File;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
public class MediaScanner {
private static final String TAG = MediaScanner.class.getSimpleName();
private MediaScannerConnection mConn = null;
private SannerClient mClient = null;
private File mFile = null;
private String mMimeType = null;
public MediaScanner(Context context) {
if (mClient == null) {
mClient = new SannerClient();
if (mConn == null) {
mConn = new MediaScannerConnection(context, mClient);
class SannerClient implements
MediaScannerConnection.MediaScannerConnectionClient {
public void onMediaScannerConnected() {
if (mFile == null) {
return;
scan(mFile, mMimeType);
public void onScanCompleted(String path, Uri uri) {
mConn.disconnect();
private void scan(File file, String type) {
Logs.i(TAG, "scan " + file.getAbsolutePath());
if (file.isFile()) {
mConn.scanFile(file.getAbsolutePath(), null);
return;
File[] files = file.listFiles();
if (files == null) {
return;
for (File f : file.listFiles()) {
scan(f, type);
public void scanFile(File file, String mimeType) {
mFile = file;
mMimeType = mimeType;
mConn.connect();
【原创】【翻译】Activity的介绍
Java线程
Java新手入门的30个基本概念
Android 版本 代号
Java基础教材收集下载
Android获取版本号
Java的String、StringBuilder、StringBuffer
Android BroadcastReceiver 的简单用法。
面向对象程序设计的基本原则
Android Activity生命周期
个人所得税Java实现代码
JAVA开发环境搭建
puddletag:音频标签编辑工具
deadbeef音乐播放器
Git push and delete remote branches
一句话评论设计模式六大原则
alexa记录
是爱,还是虚荣,也许是需要解决的问题
【原创】Android Handler和Message
U盘安装Windows
郁闷的代码
看待“原谅”
又到研究生考试的时候了
从今天起不许丝毫懒惰。
我希望在早晨到来之前把桌面东西整好。
电子计算机组成原理
几句闲扯改变人生
博客日志 - Google 广告给装上了
2019.04 面试官的思考
程序员解决问题的正确方式
聊一次可爱的面试
一位两年 Android 开发经验的总结
团队梯度建设和核心人员的培养选拔的一些思考
关于阿里 Yun OS 的事
对技术管理的重新思考-散养还是圈养
Ubuntu下Android开发eclipse启动慢
通过 Uri 获取绝对路径
Google Code
你好,2012
Ubuntu 和 Windows 的鼠标键盘共享方案
Retrofit 源代码阅读笔记
Java 动态代理 Proxy
Android JetPack ViewModel 源码分析
Windwos7 上 Notepad++ 安装插件和中文自动换行的问题
昨天我拒绝了两个小改动
关于阿里 Yun OS 发布
DNS 和 HttpDNS
小丫头的足迹
Android 获取设备唯一标识的几种方案
站长日志 - 网站空间
博客日志 - 网站美化
nginx 日志切割
bd0001.sys 文件导致 Chrome 打不开任何网页
写在2011年的最后一天
Android 混合编程 Java 和 JavaScript 的交互
Kotlin 自学笔记 - Idioms 代码风格
ubuntu下无法启动ADB
博客又搬家了,阿里云
Kotlin 自学笔记 - 编码规范
Kotlin 学习之空安全 Null Safety
Kotlin 学习之相等 Equality
Kotlin 基本语法 basic syntax
Kotlin 学习之控制流
Kotlin 学习之包 Package
kotlin 学习之 Kotlin 基本类型 Basic Types
Android 程序员所需要知道的网络知识
程序员提交代码的几个好习惯
内网 maven 服务器搭建
寒冬下的程序员
工作八年的一些思考
如果选拔小领导
Android LruCache 源码分析
数据结构:表、栈和队列
AAPT err libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
Android 应用和进程
Android 项目图片资源文件的使用,适配以及优化
Java NIO 完全学习笔记
Java IO
Java IO 之 InputStream 输入字节流
罗技 M325 蓝牙鼠标的使用感受
关于技术管理的一些理解
Android知识点整理
Java/Android 开发中如何正确使用注释
Android 软键盘弹起和消失事件
EditText 输入文本的时候,页面空白
三星 4.3 系统数字选择器长按空指针
Android 获取 cache 目录失败 ContextImpl: Failed to ensure directory
ActionBarActivity 的子类在获取 ActionBar 的时候出现的空指针
InputStream readLong 优化
一个渠道号获取方法的优化
UDP 用户数据报协议
TCP 传输控制协议
HTTP 协议
IP 协议
RESTful API 设计 初了解
计算机安全 - 加密解密
程序员日常工作之代码版本管理
Android Coding Standards
Android 性能指标
Android 动画之一 帧动画 Drawable Animation
Andoid 动画之二 视图动画 View Animation
Android 动画之三 属性动画 Property Animation
AsyncTask 官方文档的简单翻译和理解
Android 消息推送
Andriod 的 Java 虚拟机
Internal Storage And External Storage
Toast
Android 权限等级
Security Tips
Android Loader 机制
是否需要给每个 Activity 类提供 startActivity 方法
startActivityForResult
时间管理的原则
从疯狂动物城看产品细节
对写技术文档这件事的思考
SpannableString 与 SpannableStringBuilder
设计模式之享元模式
设计模式之组合模式
Linux 进程间通信
Android res/xml res/raw 和 assets 以及其他资源文件的区别
Content Provider
帕累托原则
美橙互联已经 N 多天打不开主页了
Java 注解 Annotation
Java 反射 Reflection
debug.keystore 找不到
两个PM -- 产品经理 和 项目经理
Android 多媒体 API
startService 碰见 SecurityException
Android Fragment 和 FragmentManager 的代码分析
Activity onSaveInstanceState() 方法分析
Android 进程的生命周期 Processes and Application Life Cycle
Android 进程间的通信
TouchDelegate 代码分析
再见Real
Android 专题之广播
Android 专题 - 调试工具篇
Node.js npm 工具
Android 数据存储方式
Android UI 调试工具 Hierarchy Viewer
Android 调试工具 dmtracedump
Android 调试工具 Traceview
Android Intent 和 Intent Filter
Java 专题整理
Linux 专题整理
Android 专题 - 知识整理
搜狐博客:该日志已隐藏
Android 多媒体扫描 MediaScannerConnection
关于 U 盘的一些知识
Windows Apache PHP 环境搭建
Android 事件分发机制源码
路由器设置
无线协议 IEEE 802.11
Linux dnsmasq 服务
netstat
获取 sdcard 和 内部存储的空间大小
设计模式之原型模式
设计模式之代理模式
设计模式之建造者模式
设计模式之模板方法模式
六大设计原则之依赖倒置原则
想起了姥爷
六大设计原则之接口隔离原则
六大设计原则之开闭原则
六大设计原则之迪米特法则
六大设计原则之里氏替换原则
六大设计原则之单一职责原则
六大设计原则
在 JDK 1.7 的环境下开发 Android
Programmer’s dilemma
设计模式之抽象工厂模式
设计模式 之工厂方法模式
Free Loop
设计模式之简单工厂模式
设计模式之单例模式
23种设计模式
Ubuntu & Debian RAM Disk
Eclipse 设置小技巧
Android 官方文档上的调色板
网站改版惨遭降权
阵线拉长了,可以试试,但是时间管好。
Android 基础之 IntentService 源码
Android 基础之 IntentService
Java 基础之异常抛出
Java 基础之异常捕获
Java 基础之异常
[翻译]每个 Java 程序员都应该知道的关于 String 的10件事
Java 基础之 Integer
Android ADB package manager pm
Android 开源项目之 Volley
Android ActivityGroup
新站长手册
Java 基础知识 三大特性 - 封装、继承与多态
Java 关键字 访问控制 public protected private
Java 专题 - 关键字篇
Maven Build 生命周期
Maven 介绍
Chrome 插件开发 - popup
Chrome 插件开发 - options
Chrome 插件开发 - manifest.json
Chrome 插件开发 - background
Android 开发工具 ADB 命令
Chrome 插件开发
Android 网络编程之 HttpClient
Android 网络编程之 HttpURLConnection
Ubuntu
Git hooks 在我的网站的运用
Ubuntu 工具之 iotop
Android IntentFilter 匹配规则
Android 基础之 Intent Activity Actions
Eclipse
Android Intent 的解析
Android 发布 aar 到 maven 服务器
Android 基础知识之权限大全
maven
nginx ssl 编译问题
nginx 启动报 no such process 错误
nginx 配置 http 跳转到 https 实现全站 https
Android 基础之开机自动运行
nginx
计算机网络知识的整理
DNS 和 HttpDns
Java 基础数据类型
计算机网络
Android 开发的整洁架构
解决 eclipse 自动补齐变量名时加上类型后缀的问题
面试中,最重要的数据结构知识
Android 中 Activity 4 种启动模式
Linux Mint
Meld Diff Viewer 文档比较的好工具
Windows
Ubuntu 下代理和 pac 设置
Mac OS bashrc 文件
Ubuntu 上安装 Atom
ssh 配置别名
查看 Linux 系统信息
mac 上 ssh 配置解决反应慢的问题
使用脚本清理项目中 build 目录
Linux 设置时区不生效
上班族们,为了你的时间和健康,这个小脚本绝对适合你
Linux 鼠标右键菜单新建文档
Linux 批量重命名
如何让 Dialog 不消失
Linux 使用技巧
Android 文件夹删除后留下不可访问的空文件
PhoneGAP
MarkItUp HTML 文本编辑器
NodeJS
Linux 系统资源查看管理常用命令
git config 修改配置信息
HTML 页面 100% 高度
好看的网站配色
页面内容不足以铺满屏幕高度时,footer 居底显示
Android 字符串资源文件 String Resources
Java 中重载和重写 Overloading and Overriding
JavaScript
Java 基础之克隆 clone
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 553: illegal multibyte sequence
python 字符串格式化
python 时间库
bs4.FeatureNotFound couldnot find a tree builder with the features you requested lxml
使用 Python 脚本同步 Gralde 服务器镜像
Python 字符串比较忽略大小写
Python 获取文件大小的方法
如何在 Python 中重命名文件
Python 创建一个文件并且创建其文件夹
Python 文件大小格式化输出
Python 过滤某后缀的文件
Python 3 安装
Python3 reload(sys) 找不到
根据图片/视频路径获取缩略图路径
Python
Java 基础之 强引用,软引用,弱引用和虚引用
Eclipse 插件 subclipse 安装时 JavaHL 的问题(windows 7 64bit)
Android Service startService and bindService
CSDN 我得分的帖子
SQLiteDatabase query() 和 rawQuery() 的区别
那种IT职业适合你?
文本编辑器 Notead++
JavaMail for Android
Android 流量统计 TrafficStats
通过修改 hosts 文件屏蔽广告
Ubuntu 上的神秘浏览器
[翻译与分享]想要成为一个 Java 工程师?
开发工具之 SQLiteBorwser
Java 线程之 sleep 和 wait
TCP/IP 协议族的四个分层
Android ImageView 的 ScaleType 属性
做个站长确实不容易 - 超级监控使用感慨
Android 和 iOS 混合编程
FESCO 电影券又该作废了
git push.default 的设置
AlarmManager 之常量
Google 开源项目之 GSON
Google 被封带来的影响
Android 服务之 AlarmManager
Java 垃圾回收
Nexus 4 获得 Android 4.4.3 升级
净网行动对网站流量的影响
CSDN Code 代码托管服务
Surface Pro 3 和微软正在逐渐迷失方向 ?
上品折扣算是电商吗?
短暂的百度权重为1
苏宁免费贴膜抢了贴膜小哥的生意?笑话
Android 判断用户2G/3G/4G移动数据网络
由 SparseArray 带来的程序设计的思考
茶花水荡玻璃杯,质量太次了
517电信日
移动互联网革命下的水费
一个帐号走天下有何不好?
Java 垃圾回收之 Finalizer
诺基亚 Android 手机 Nokia X
Android 所有的网络信息 NetworkInfo
经过一番折腾,又回来了。
深入Android应用开发:核心技术解析与最佳实践 的一个错误
Android 权限管理 之 <permission> 标签
Android 权限管理之 <uses-permission> 标签
Android 隐藏虚拟按键
各基础数据类型在 Java 虚拟机里的内存占用
Android 休眠后获取音量键的输入
五一前的北戴河
Android 设置 Activity 透明
Android SparseArray 系列
Android ListView 快速滑动的优化
Android 用户交互之输入控制
RTP 信息头中 sequence 和 timestamp 在Android 4.4 中强制检测
在 Java 中 boolean 类型占多少字节
在家休假却碰上邻居装修房子
用了一天时间重新修改了网站程序
weather.com.cn的天气预报API已经不可靠了
Typany是穿戴式设备的另一个思路,但不会是一个最终方案。
看看虚拟运营商怎么玩
大屏幕的悲剧
CSDN帐号
对沟通的思考
离家远就出门早点
顺口溜的服务
百度统计出问题了
长处与短处
Java 的几种文件读取方式
为什么又做了一个小分站?
部分手机浏览器访问不了内网地址
JavaScript 离开页面是发送请求
HTML5 viewport 的一点试验
站长日志 - 更换空间
windows 上 adb 端口被占用
Javascript 监听屏幕翻转事件
作死的微博
拜亚动力(beyerdynamic)FX 1
Chrome 记住密码
Nexus 5 发布上市
Google Play Nexus
为什么程序员不喜欢需求变更
Chrome:最受欢迎的浏览器
最后20%的工作花费的时间跟前面80%的一样多
博客故障,网站不能访问
MulticastSocket绑定端口的问题
mDNS原理的简单理解
FragmentTransaction add 和 replace 区别
在PhoneGap中调用Android的Java代码
怎样设计博客
估测Google搜索算法的提高
The Python Tutorial
Setup PhoneGap 搭建PhoneGap开发环境
Ubuntu环境变量配置
phonegap build android 失败
垂直SeekBar实现
安装PhoneGap
新浪会员取消
亚马逊发布Kindle Fire HDX
安装Node.js
小米和360掐架
Sublime Text 背后的故事
PHP 字符串删除操作
Wikipedia 每年运行花费四千万
Kotlin 自学笔记 - Idioms 代码风格
Kotlin 自学笔记 - 编码规范
kotlin 自学笔记 - 基本语法
Google Chrome 更新
Kotlin
Ubuntu下下载Android源码
ImageView 和 ViewFlipper 使用时遇到的两个宽高问题
更少就是更多
Google 换扁平化风格的logo了
介绍一个关于互联网设计的外文网站
Google为什么不拷贝创业公司的创意
学习网站开发应该去的网站
中国搜索引擎战争
介绍一个挺好的网站 pixelstech.net
腾讯的两个新闻
百度推出百度影棒,类似于Google ChromeCast
由踢毽子想到的团队合作
Apple 是个好孩子
加上了相关文章的功能
iPhone 5s and iPhone 5c
京东不爽的购物体验
HTML 文章段落开头空两格
沉甸甸的生日礼物
小米3和小米电视
三星发布Galaxy Note 3 和 Galaxy Gear 智能手表
Ubuntu下拨号上网
Amazon 发布 New Kindle Paperwhite
Google 发布 Android 新版本代号
ubuntu上的ffmpeg 和 mediainfo
微软收购诺基亚
魅族MX3发布
SAMSUNG 智能手表Galaxy Gear 待机10小时
ADTS结构
Google Nexus 4 降价100美元
小米挖Google的墙角
新浪微盘的新反应
高等教育与基础教育
unbuntu上使用samba解决文件共享问题
诺基亚208上市,S40系统,售价499人民币
最近的网盘市场很热闹
Android socket 服务端
adb shell 启动应用程序
DNS解析出错
电子计算机组成原理 学习笔记 第八章 到 第十一章
电子计算机组成原理 学习笔记 第七章 CPU组织
电子计算机组成原理 学习笔记 第六章 主存储器与存储体系
电子计算机组成原理 学习笔记 第五章 运算方法和运算器
Android socket 连接客户端代码分享
电子计算机组成原理 学习笔记 第四章 指令系统
电子计算机组成原理 学习笔记 第三章 计算机中的逻辑部件
电子计算机组成原理 学习笔记 第二章 计算机中数据信息的表示
电子计算机组成原理 学习笔记 第一章 概论
12520098679 诈骗电话
ubuntu 安装 chrome
ubuntu 安装gnome
too many libraries when loading *.so
RTSP status codes
青岛之行,7月6号
Android Socket连接服务器端代码
青岛之行,7月5号
Ubuntu apt-get update Could not get lock/var/lib/apt/lists 错误
ubuntu 安装 ant
adb 连接不到设备
DarwinStreamingServer
一个很好用的文档比较工具 -- Beyond Compare
U盘安装Linux Mint 15
Virtual Box安装linux mint
linux删除命令rm
照片越来越多
修改了一下界面效果
Unity 3d 免费了
如何从Eclipse迁移到Android Studio上
Android Studio 初使用
盗版字典惹的祸
Ubuntu scp 命令
CNZZ站长统计乱码
Ubuntu 10.04 安装 VirtualBox 总是失败
Android 4.2 开发者选项
ubuntu 开机启动中文输入法
CSS 的好处
ubuntu 网速慢的问题
生成SSH keys
五一劳动节
Google官网下载NDK包
C语言中调用其他源文件的函数
C语言的for循环
GitHub 使用
Android SQLiteOpenHelper 的一些小小分析
写在工作前
Windows Phone 8 手机Nokia520
git 新建一个branch
Fesco电影票
ListView 改造成 GridView
ScrollView 嵌套 GridView 或者 ListView
不就是种树嘛
百度空间可真严啊
SimpleCursorAdapter bindView 方法被多次调用
五道口房价
抱怨没时间,不如写一篇日志吧
Android开发日志分析收集
新浪微博登录
Google I/O 大会
git 查看一个文件的更改历史
戴尔三部曲
HP520风扇一直转
Java 基础知识复习点
号称10M的宽带
偷偷地在深夜写下这篇
博客日志 - binkery.com 被 Google 收录
Ubuntu10.10 中 python CPU占用率高
Android 其他
戴尔的效率
我是专程来黑戴尔的
做事必须搞清10个顺序
单反之快门
单反之光圈
包含简短元说明的页面
镜头焦段介绍
糟糕的天气
GridView 设置 item 间距的方法
Ubuntu 下 rar 和 7z 解压
浏览器变成记事本
小谈我使用的快递公司
Android EditText 文本框
SQLite 数据类型
站长日志 - 小小更新
4K电视、4K电影、4K技术
Android使用XML定义渐变的drawable
Android 获取控件的宽高
TextView android:drawablePadding 不起作用的时候
博客日志 - 网站百度收录不佳
Ubuntu 11.10 安装
Eclipse – “Too many open files” Problem
Android Layout 编辑器不能工作
Android GridLayout V7 的支持
神一般的京广高铁
站长日志 - 评论功能
坑爹的电信运营商,网速慢,劫持DNS,加广告
昂贵的生活
windows pc 输入法
gen already exists but is not a source folder. Convert to a source folder or rename it
404的公益广告
TCP和UDP的区别
站长日志 - 留言板功能
光影魔术手批量处理照片慢的问题
Android 获取应用的权限
Android 屏幕锁 - FLAG_KEEP_SCREEN_ON
网站被电信运营商加了广告代码
Git 查看两次 commit 之间的变更
Android 屏幕锁 - WakeLock
这些应用都干了些啥
Android Video 查询 Thumbnail 出错
Git使用
ListView拖动时背景黑色的问题
Google广告导致网页加载慢
Textarea - 富文本编辑器插件
博客日志 - 重新上线
使用weather.com.cn的API开发简单的天气预报App
在webview中,使用javascript调用java代码
Nexus 7 使用感受
Connecting the Google Nexus 7 to Ubuntu / Mintover USB
从入职体检谈产品设计
无趣的一天因为失落
任正非在2012实验室的讲话
SoundsBook项目日志
G1联网和彩信设置
第三次安装Visual Studio 2012
天将降大雨于斯人也
Axure RP pro 6.5 序列号 License
遭受老外各种广告入侵
Windows 8 Release Preview Install (预览版安装)
正式入住博客空间
手划船归来
近期网易邮箱的非正常情况
达芬奇密码下面的验证码
丫头再次回归
站长日志 - 本站主机空间
对盛大Bambook的吐槽
转义字符串
几本关于产品设计的书籍的收集
带病毒的垃圾邮件
排序算法总结
Android Application AnyTimeNote
ubuntu 10.04不再长期支持了?
北京周末游玩去处
Android Doc Content Providers 中文
又是一个月末
Java 技术是什么?
java训练题——解析
Android 糟糕的 xml 资源管理
困难矛盾面前我又明白了
Android XML
在 Android 中,“px”, “dip”, “dp” 和 “sp” 有哪些不同
Android 获取唯一设备标识的几种方案
Improving Stability by Reducing Usage of non-SDK Interfaces
罗列一些想看的东西
Android 适配
Kotlin 中优雅的解决快速点击
《一夜不了情》
Androd Intent ACTION_PICK 获得空的 cursor
添几句话吧
Intent
笨鸟先飞 Lesson 1
Content Provider
记在心里的几句话
Android WebView 的方法只能在 UI 线程中运行
Android WebView 不支持 H5 input type="file" 解决方法
认真管好自己
Android官方文档 Starting an Activity
Android 动画
Android文档Declaring the activity in the manifest
Service
Android面试题目
Android文档 Implementing a user interface
SQLite
Android Studio Sonar Lint 插件
小米手机 adb install failed
Android 编译时间太长的问题
build.gradle 文件中的 Android SDK Build Tools version
利用内部 SDK 镜像更新 Android SDK
Android sdkmanager 的使用
Android 6.0 之前的录音权限问题
alertdialog的使用
权限与隐私
Android 画中画适配问题
android的TOAST使用
多媒体技术
android的menu实现
android的menu实现练习小结
进程与线程
0312随感
UI 控件
Fragment 的过场动画
Android onSaveInstanceState 的使用
Creating an Activity创建一个Activity
Android 用注解来提升代码质量
Android 架构组件介绍
Android 之 Activity 专题
Android学习主题
EMLOG模板结构介绍
友情链接申请
- EOF -
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: Android 多媒体扫描 MediaScannerConnection
本文地址: https://binkery.com/archives/473.html