[英]File created only after first installation of the app - ANDROID
我有這個代碼:
private void requestPermissionAndExport() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
try {
export();
} catch (IOException e) {
e.printStackTrace();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public void export() throws IOException {
String csv_data = "testtest";
File root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
root = new File(root, "my_csv.csv");
try {
FileOutputStream fout = new FileOutputStream(root);
fout.write(csv_data.getBytes());
fout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
它在我第一次安裝和啟動應用程序時工作。 如果用戶從下載文件夾中刪除csv
文件並嘗試再次打開應用程序,並再次導出csv
,則沒有任何反應。 此外,如果我每次為文件生成不同的名稱,則只會創建第一個(安裝應用程序后)。 為什么這僅在第一種情況下有效?
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
try {
export();
} catch (IOException e) {
e.printStackTrace();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
大概就是這個原因吧。 您只在onRequestPermissionsResult()
內部調用export()
) 並且應用程序只請求一次權限,並記住它直到您卸載它。 自己嘗試一下:如果您從應用管理器中清除應用數據,它會再次詢問,然后再次導出文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.