在Android 11及更高版本中,由于Android已经弃用了As关键字,因此建议使用Java 7引入的另一种异常捕获方式,即try-with-resources语句。该语句可以自动关闭打开的资源,例如文件、流等。以下是使用try-with-resources语句的示例代码:
try (InputStream in = context.getContentResolver().openInputStream(uri)) {
// 处理输入流,无需手动关闭
} catch (IOException e) {
Log.e(TAG, "Failed to read from input stream", e);
}
对于低于Android 11版本的设备,可以使用AndroidX库中的legacy库来代替As关键字。以下是使用legacy库的示例代码:
String path = null;
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
path = cursor.getString(index);
}
} catch (Exception e) {
Log.e(TAG, "Failed to get path from cursor", e);
} finally {
if (cursor != null) {
cursor.close();
}
}
在上面的代码中,我们查询了包含指定URI的图像数据的MediaStore,并检索了其中的数据列。这里使用cursor.getString(int)检索POSITION数据列,并使用try-catch-finally语句确保在任何情况下都会关闭光标。