在Android Q及以上版本中,Android对文件访问进行了一些限制,需要使用特定的API来实现。下面是一个使用Android Q的新文件访问API访问媒体文件的示例代码:
首先,添加必要的权限到AndroidManifest.xml文件中:
然后,创建一个方法来检查设备的SDK版本是否大于等于Android Q:
private boolean isAndroidQOrAbove() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
}
接下来,在Activity或Fragment中,使用以下代码来选择媒体文件并访问它:
private void selectMediaFile() {
if (isAndroidQOrAbove()) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("audio/*"); // 可以根据需要更改文件类型
startActivityForResult(intent, REQUEST_CODE);
} else {
// 在Android Q以下的版本中,可以使用旧的文件访问方式
// 可以在这里使用旧的方式来选择媒体文件
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Uri uri = data.getData();
if (uri != null) {
// 在Android Q及以上版本中,需要通过DocumentFile来访问文件
DocumentFile documentFile = DocumentFile.fromSingleUri(this, uri);
// 使用MediaPlayer来播放媒体文件
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(this, uri);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
请注意,上面的代码只是一个示例,你可以根据自己的需要进行修改和扩展。另外,还可以使用其他的文件访问API,如Storage Access Framework(SAF)来访问文件。