在Android 10中,MediaStore游标(Cursor)默认只显示媒体文件,而不显示非媒体文件。如果你想要显示所有文件,包括非媒体文件,可以使用MediaStore.Files类。下面是一个使用MediaStore.Files类显示所有文件的代码示例:
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 查询所有文件
Uri uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL);
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.DATA
};
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
// 从游标中获取文件名和路径
String fileName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME));
String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA));
Log.d(TAG, "File Name: " + fileName + ", File Path: " + filePath);
}
cursor.close();
}
}
}
以上示例中,我们使用MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)获取文件的Uri,然后使用ContentResolver.query()方法查询文件。通过遍历游标,我们可以获取文件的名称和路径。请注意,此示例仅适用于Android 10及更高版本。