MediaStore检查文件是否存在(即使是挂起的或其他包)



有没有办法检查是否可以编写uri?因此,需要一种方法来检查文件是否存在,即使它是挂起的或不属于我的应用程序包名称?

如果你这样做:

Cursor cursor = resolver.query(mediaUri, Column, MediaStore.MediaColumns.DISPLAY_NAME + "=?", new String[]{fileFullName}, null);

问题是,如果该文件处于挂起状态或不属于您的程序包,则答案是该文件不存在。然后,如果您使用resolver.insert,它将失败,因为该文件存在,但处于挂起状态或其他原因。

如果您在查询中添加语法错误,您可以看到:

near ".": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT _id, _display_name FROM images WHERE ((owner_package_name IN ( 'xxxxx' )) AND (is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' , '0ff0-0909' ))) AND (_display_name=.?)

因此,在引擎盖下,会自动添加((owner_package_name IN('xxxxx'((AND(is_pending=0(。

那么,我们如何检查我们想要创建的文件是否可用,而不需要在循环中插入,直到它没有失败?

ps:我创建了一个文件";文件.png";。然后,当我创建第二个时,用户可以决定覆盖或创建新的-->file(1(.png(在文件名中自动添加(1((

所以我有一个未知的可能的文件(xxx(.png我查询并找到最后一个加+1的数字。只要文件不挂起并且属于我的应用程序,它就可以工作。但是,由于该文件可能处于挂起状态,或者不属于我的包,所以它不是99.9%,我有最后一个文件,我需要循环并插入util it not failed。。。。

希望,我成功地让自己明白;(

因此开始解决方案:

添加并请求此权限:android.permission.READ_EXTERNAL_STORAGE

一旦您获得了权限,查询就不会自动添加到引擎盖下(owner_package_name IN('xxxxx'(,因此无论包是什么,您都会得到一个所有内容的列表。

但是仍然有添加到您的查询中(is_pending=0(。我仍然没有找到如何在挂起状态下进行查询,以检查可用的文件名。

相关内容

  • 没有找到相关文章

最新更新