Guys New to Nougat come from Jelly bean Trying to write to sdcard a text file I know I now have to request permissions but cant find any code that works
Tried the following
StringBuilder bodyStr=new StringBuilder();
bodyStr.append(data1Str.toString()).append(",").append(data2Str.toString()).append(",").append(data3Str.toString()).append(",").append(data4Str.toString()).append(",").append(data5Str.toString()).append(",").append(data22Str.toString()).append(",").append(data23Str.toString()).append(lineSep);;
String bodytextStr=bodyStr.toString();
boolean hasPermission = (ContextCompat.checkSelfPermission(data_entry.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(data_entry.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
try {
File myFile = new File(fileName);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
myOutWriter.append(bodytextStr);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),
"Done writing SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}
Comes back [permission denied]
have set usual permissions in manifest
any ideas where i'm going wrong
Any help Appreciated
Mark
Either you have the permission and can do the try catch block where you write into the file or you have to do it in the onRequestPermissionsResult.
Something like :
public void yourMethod(){
boolean hasPermission = (ContextCompat.checkSelfPermission(data_entry.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if(hasPermission){
// write
}else{
// ask the permission
ActivityCompat.requestPermissions(data_entry.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
// You have to put nothing here (you can't write here since you don't
// have the permission yet and requestPermissions is called asynchronously)
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// The result of the popup opened with the requestPermissions() method
// is in that method, you need to check that your application comes here
if (requestCode == REQUEST_WRITE_STORAGE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// write
}
}
}
I suggest that you check this link : https://developer.android.com/training/permissions/requesting.html
This is what you need: https://developer.android.com/training/articles/scoped-directory-access.html#accessing
You have to ask the user to give the rights to access it.
来源:https://stackoverflow.com/questions/40467121/android-7-1-write-to-text-file