概述
近日给公司产品(安卓系统)增加 拷贝otg U盘的音乐文件到设备内置sdcard的功能.拷贝成功后,通过媒体库无法正常找到.
问题现象
- 使用context.getContentResolver().query 方法无法查询到新文件.
- 通过USB数据线在电脑通过MTP协议查看sdcard目录也找不到文件.
- 但是在adb shell命令查看目录文件存在
- 且重启设备后.这些文件又存在.说明实际创建的文件是有了,只是因为某些原因导致没有同步到MTP文件系统和音频数据库中
尝试着创建文件后调用如下2个方法都无法:
1)ContentResolver.setMasterSyncAutomatically(true);
2)ContentResolver.requestSync(request);
通过百度和查看系统部分源码.发现通过流创建的文件. 并不会直接更新MTP数据库和媒体音频数据库.需要手动触发更新.
解决办法
综合了以下至少有2种方法:
方法1
调用MediaScannerConnection类扫描更新,可以指定MIME文件类型
//解决新建和复制的文件 需要重启才能看到
MediaScannerConnection.scanFile(context,
new String[]{Environment.getExternalStorageDirectory().toString()},
new String[]{"audio/*"},
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String arg0, Uri arg1) {
setBroadcast(context,msg);
}
});
方法2
发送指定intent的系统广播.
Uri data = Uri. parse("file:///sdcard/" +fName);
sendBroadcast( new
Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE , data));
最后
以上就是震动小蝴蝶为你收集整理的安卓sdcard写入文件需要重启才能生效的问题的全部内容,希望文章能够帮你解决安卓sdcard写入文件需要重启才能生效的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复