您好我正在尝试通过启动扫描来刷新图库。对于运行 Kitkat 和更高版本的设备,我正在使用 mediascannerconnection。但是 mediaScannerConnection 需要绝对路径才能进行扫描。我所拥有的是一个DocumentFile,它似乎没有任何方法来获取它的绝对路径。
以下是我正在使用的代码:
要使用新的棒棒糖 API 获得写入文件夹的权限——>将选定的 URI 保存到全局变量——>隐藏逻辑(创建/删除“.nomedia”文件)。
// Calling folder selector.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
..............
@SuppressLint("NewApi") @Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK && requestCode == 42) {
Uri treeUri = resultData.getData();
getContentResolver().takePersistableUriPermission(treeUri,
// Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION |
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
path = treeUri.getPath();
}
}
..........
public void hide(boolean hide){
DocumentFile pickedDir = DocumentFile.fromTreeUri(this,Uri.parse(path));
if(hide){
if(pickedDir.findFile(".nomedia")==null){
pickedDir.createFile(null, ".nomedia");
tellgallery(pickedDir.findFile(".nomedia").getUri().getPath());
}
}
else{
DocumentFile filetodelete = pickedDir.findFile(".nomedia");
if(filetodelete!=null){
filetodelete.delete();
tellgallery(filetodelete.getPath());
}
}
}
上面的代码完美运行,并在所需文件夹中创建/删除“.nomedia”文件。
现在,当我尝试告诉画廊该文件夹的文件已更改时。Gallery 无法选择更改。
下面是刷新/请求扫描的代码。
private void tellgallery(String path) {
pathtonomedia = path;
if(path!=null){
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
mediaScannerConnection = new MediaScannerConnection(con,mediaScannerConnectionClient);
mediaScannerConnection.connect();
}
else{
this.sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + path)));
}
}
}
MediaScanner 类如下:
private MediaScannerConnectionClient mediaScannerConnectionClient =
new MediaScannerConnectionClient() {
@Override
public void onMediaScannerConnected() {
mediaScannerConnection.scanFile(pathtonomedia, null);
}
@Override
public void onScanCompleted(String path, Uri uri) {
if(path.equals(pathtonomedia))
mediaScannerConnection.disconnect();
}
};
但是代码不会刷新图库,我仍然可以在图库中看到该文件夹。然而,该文件夹会在 10 到 20 分钟后消失,这可能是系统刷新所致。
最后我想要的是
无论如何我可以获得 DocumentFile 实例的路径吗?这样我就可以直接将它传递给 mediascanner 路径
或者是否有任何其他方法可以请求扫描棒棒糖中的特定文件夹。特定文件夹位于 SDCARD 中,我只知道它的 URI 而不是实际路径。
非常感谢任何帮助。