Android媒体库更新问题

1.媒体库何时更新?

在系统开机或sdcard卡被加载时,系统会自动扫描sdcard,将扫描到的如音频、图片等媒体文件保存到媒体数据库中,通过Android提供的相应的ContentProvider,我们可以获取这些媒体资源;但如果我们在开机状态下,在sdcard内增加或删除一些媒体文件时,系统并不会自动扫描,因此媒体库不会更新(除非自行向媒体数据库中添加或删除)

2.如何让媒体库更新?
2.1.增加
2.1.1.在Android 4.4之前我们可以通过以下方式,使系统扫描sdcard并更新媒体数据库:
Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()));
sendBroadcast(intent); 发送一个广播,让系统更新媒体数据库,也适用于删除媒体文件;
2.1.2 在Android 4.4之后
但在Android 4.4中,限制了系统应用才有权限使用广播通知系统扫描SD卡,如果普通应用发送此广播将会出现异常:Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

可以采用如下解决方式:

方式1:

MediaScannerConnection.scanFile(context, new String[] {“文件路径,包括文件名”}, null,null);
方式2:

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(new File(“文件路径,包括文件名”)));
context.sendBroadcast(intent);
以上两种方式的局限性在于,只能指定扫描单个文件,不能指定文件夹,因此需要我们在下载文件完成时,使用上述方式更新媒体数据库;

2.2 删除
在Android 4.4 之前,可以通过发送Intent.ACTION_MEDIA_MOUNTED广播的形式;

在Android 4.4之后,使用ContentResolver进行删除:

以删除音频文件为例:

通过路径删除

context.getContentResolver().delete(
					MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
								MediaStore.Audio.Media.DATA+ " = '" + 音频文件全路径 + "'", null);


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值