在使用 adb rm 命令删除设备 SD 卡中的图片文件后,发现系统的图库并未更新,这样就造成一些图片软件上显示无法加载图片的问题(例如 Instagram),因为该照片已被 “删除”,除非重启设备或者系统知道有图片被删除了(增加是图片一样的)
要解决这个问题,不需要重启设备,只需要向发送一条 MEDIA_SCANNER_SCAN_FILE 的广播,扫描指定文件即可。
操作也非常简单,这里简单介绍下通过 adb 发送系统广播:
打开 shell,输入 am,即可查看到相关的用法说明:
am broadcast: send a broadcast Intent. Options are:
--user <USER_ID> | all | current: Specify which user to send to; if not
specified then send to all users.
--receiver-permission <PERMISSION>: Require receiver to hold permission.
以及部分 Intent 的用法
<INTENT> specifications include these flags and arguments:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--esn <EXTRA_KEY> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
通过发送广播扫描指定文件
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://%PATH%
实例:
#删除SD卡中的图片文件
adb shell rm /sdcard/DCIM/Camera/ILSVRC2015_test_001.JPEG
#发送广播,通知系统扫描指定的文件,达到更新图库的目的
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///storage/emulated/0/DCIM/Camera/ILSVRC2015_test_0001.JPEG
这样,就解决了开头说的问题,还未深入了解原理,请轻拍