在使用 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

这样,就解决了开头说的问题,还未深入了解原理,请轻拍


↙↙↙阅读原文可查看相关链接,并与作者交流