title: Android's WRITE_EXTERNAL_STORAGE permission issue on Samsung Galaxy Api 23 version 6
body: <p>I need to open a pdf using a uri.
  I have the code in place to open the pdf. 
  My code works fine on Api greater than 23.
  I get the following SecurityException when I try to download the file on a Samsung Galaxy device with Api 23 and version 6.</p>
  
  <p>Here is the exception:</p>
  
  <pre><code>01-25 19:28:38.723 6655-6667/android.process.media E/DatabaseUtils: Writing exception to parcel
      java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/Canto Quick Start Guide.pdf: Neither user 10022 nor current process has android.permission.WRITE_EXTERNAL_STORAGE.
          at android.app.ContextImpl.enforce(ContextImpl.java:1438)
          at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1470)
          at android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:675)
          at com.android.providers.downloads.DownloadProvider.checkFileUriDestination(DownloadProvider.java:724)
          at com.android.providers.downloads.DownloadProvider.insert(DownloadProvider.java:558)
          at android.content.ContentProvider$Transport.insert(ContentProvider.java:263)
          at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163)
          at android.os.Binder.execTransact(Binder.java:507)
  </code></pre>
  
  <p>I have setup the required permission in manifest file</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;
      &lt;uses-permission android:name="android.permission.CALL_PHONE" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt;
      &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
      &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
  </code></pre>
  
  <p>I have the following check in place to test if the user does not have WRITE_EXTERNAL_STORAGE permission then ask the user for granting access. </p>
  
  <pre><code>int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 2;
      //             Check whether this app has write external storage permission or not.
                  int writeExternalStoragePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
                  // If do not grant write external storage permission.
                  if (writeExternalStoragePermission != PackageManager.PERMISSION_GRANTED) {
                      // Request user to grant write external storage permission.
                      ((MainActivity)activity).getSharedPreferenceManager().add(PreferenceConstants.SHAREPOINT_FILE_URI, getUrl((SharepointFile) object, activity));
                      ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PermissionConstants.PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
                  } else {
                      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(getUrl((SharepointFile) object, activity)));
                      intent.setDataAndType(Uri.parse(getUrl((SharepointFile) object, activity)), "application/pdf");
                      activity.startActivity(intent);
  
                  }
  </code></pre>
  
  <p>I override the onRequestPermissionResult in MainActivity.java so that as soon as the user grants permission then the download can be initiated.</p>
  
  <pre><code>@Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  
      switch (requestCode) {
          case PermissionConstants.PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE:
              // If request is cancelled, the result arrays are empty.
              if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  String fileUri = getSharedPreferenceManager().get(PreferenceConstants.SHAREPOINT_FILE_URI);
  
                  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(fileUri));
  
                  startActivity(intent);
              } else {
                  getSharedPreferenceManager().remove(PreferenceConstants.SHAREPOINT_FILE_URI);
              }
              break;
      }
  }
  </code></pre>
  
  <p>I have the code to ask the user for permission. I do get the dialog/alert to allow access. Once the user clicks allow, I see that it still gives the above exception. I went in settings to check my app's permission and see that it is turned "on" for storage. Why would I still get permission issue? Any pointers on what I could be missing here? Appreciate your help!</p>