在Android 11及更高版本中,由于安全和隐私原因,应用程序不再具有对外部存储的常规访问权限。因此,如果要创建zip文件,则需要使用Scoped Storage。以下是实现这一目标的步骤:
if (Environment.isExternalStorageManager()) {
// Create zip file via Scoped Storage
} else {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
OutputStream os = getContentResolver().openOutputStream(zipUri);
ZipOutputStream zipOutputStream = new ZipOutputStream(os);
ZipEntry zipEntry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(zipEntry);
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
zipOutputStream.write(buffer, 0, bytesRead);
}
zipOutputStream.closeEntry();
zipOutputStream.finish();
zipOutputStream.close();
在上述代码中,zipUri是zip文件的Uri,fileName是zip文件的名称,file是要被添加到zip文件中的文件。
通过以上步骤,我们可以在Android 11及更高版本中使用Scoped Storage创建zip文件。