Android 7.1 Write to text file

孤者浪人 提交于 2019-12-01 12:51:33

问题


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


回答1:


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




回答2:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!