如何通过ADB获取Android(API25+)媒体ID并打开媒体文件?
获取媒体ID并打开媒体文件的方法(API 25+ 未root设备)
一、正确使用content query获取媒体ID
权限错误多因命令参数不规范,针对不同媒体类型,用以下命令可绕过大部分权限限制:
1. 查询图片的媒体ID(匹配文件路径)
adb shell content query --uri content://media/external/images/media --projection _id,data --where "data='/sdcard/myfile.jpg'"
返回结果里的_id字段就是目标图片的媒体ID。
2. 查询音频文件的媒体ID
adb shell content query --uri content://media/external/audio/media --projection _id,data --where "data='/sdcard/myaudio.mp3'"
3. 查询视频文件的媒体ID
adb shell content query --uri content://media/external/video/media --projection _id,data --where "data='/sdcard/myvideo.mp4'"
注意:文件在SD卡子目录时,路径要写完整(比如
/sdcard/Pictures/photo.jpg);路径含特殊字符(如空格)需用单引号包裹或转义(空格替换为%20)。
若仍遇权限问题,尝试添加--user 0参数(指定系统用户):
adb shell content query --user 0 --uri content://media/external/images/media --projection _id,data --where "data='/sdcard/myfile.jpg'"
二、通过媒体ID打开文件
拿到ID后,用对应类型的命令打开:
1. 打开图片
adb shell am start -a android.intent.action.VIEW -t image/* -d content://media/external/images/media/[媒体ID]
2. 打开音频
adb shell am start -a android.intent.action.VIEW -t audio/* -d content://media/external/audio/media/[媒体ID]
3. 打开视频
adb shell am start -a android.intent.action.VIEW -t video/* -d content://media/external/video/media/[媒体ID]
三、替代方案:强制触发媒体扫描(针对刚传入的文件)
新传入的文件若未被媒体库索引,先执行扫描命令让系统识别,再查询ID:
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/myfile.jpg
等待几秒后再执行content query即可找到ID。
四、特殊场景:绕过媒体ID直接打开
若仍无法获取ID,可尝试指定系统媒体查看器包名直接打开文件路径(部分设备有效):
# 图片示例:用系统图库打开 adb shell am start -n com.android.gallery3d/.app.GalleryActivity -d file:///sdcard/myfile.jpg
注意:不同设备的媒体查看器包名可能不同,可通过
adb shell pm list packages | grep gallery或grep video查找对应包名。
内容的提问来源于stack exchange,提问作者user4500
相关产品推荐
相关产品推荐

