针对Android Q的新特性,应用程序的访问权限得到了更加严格的限制。因此,要在Android Q上更改外部文件的最后修改日期,需要使用新的方式。下面是通过内容解析器更改外部文件的最后修改日期的示例代码:
Uri uri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.Files.FileColumns.DATA + "=?";
String[] selectionArgs = new String[]{filePath};
ContentResolver resolver = getContentResolver();
String[] projection = {MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATE_MODIFIED};
Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
ContentValues values = new ContentValues();
values.put(MediaStore.Files.FileColumns.DATE_MODIFIED, System.currentTimeMillis());
String updateSelection = MediaStore.Files.FileColumns._ID + "=?";
resolver.update(uri, values, updateSelection, new String[]{String.valueOf(id)});
}
if (cursor != null) {
cursor.close();
}
首先,我们通过MediaStore.Files.getContentUri("external")获取文件的Uri。然后我们使用MediaStore提供的投影,只查询要更改的文件,并将其最后修改日期设置为当前时间。最后,使用ContentResolver更新文件的Uri。
注意,在Android Q中,必须有WRITE_EXTERNAL_STORAGE权限并使用MediaStore才可以更改外部文件的最后修改日期。