【问题标题】:Android Download Manager setDestinationInExternalFilesDirAndroid 下载管理器 setDestinationInExternalFilesDir
【发布时间】:2013-05-25 13:05:11
【问题描述】:

我正在使用下载管理器以及何时使用

 setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "example.ext");

文件下载到 Android/data/com.example.app/files/Download 文件夹。

当我尝试时

setDestinationInExternalPublicDir("/folder", "example.ext");

我得到: IllegalStateException: Cannot create directory mnt/sdcard/folder。 我也设置了 WRITE_EXTERNAL_STORAGE 权限。

我做错了什么?

【问题讨论】:

    标签: android android-download-manager


    【解决方案1】:

    在清单文件中添加权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    【讨论】:

      【解决方案2】:

      为什么不用absolute 路径作为 ExternalFileDir

      File sdCard = Environment.getExternalStorageDirectory();
      String folder = sdCard.getAbsolutePath() + "/YourFolder" ;
      File dir = new File(folder );
      if (!dir.exists()) {
      if (dir.mkdirs()) {
          Log.i(Tag,"Directory  Created");
          }
      }
      

      我想这甚至可能对你有用。

      【讨论】:

      • 我尝试了以下方法。 downloadRequest.setDestinationInExternalFilesDir(v.getContext(), 文件夹, down.getTitle()+".epub"));但是文件被下载到 file:///mnt/sdcard/Android/data/com.example.app/files/*folder-path*
      • 我暂时把它从Android/data/com.example.app/files下载后的文件移动到我需要的目录下修复了。
      • 我使用这个命令解决了我的问题:request.setDestinationUri(Uri.fromFile(new File(destinationDirectory,fileName + fileExtension)));其中destinationDirectory 是字符串destinationDirectory = Environment.getExternalStorageDirectory() + "/MyFolder/"
      【解决方案3】:

      使用request.setDestinationInExternalPublicDir("/folder", "FileName.extention");

      这对我有用..

      【讨论】:

      • 可能只是因为我的版本比这篇文章更新得多,但我不得不添加上下文,所以 request.setDestinationInExternalPublicDir(this, "/folder", "Filename.extension");跨度>
      【解决方案4】:

      我使用以下命令解决了我的问题:

      request.setDestinationUri(Uri.fromFile(new File(destinationDirectory,fileName + fileExtension))); 
      

      destinationDirectory 在哪里

      String destinationDirectory = Environment.getExternalStorageDirectory() + "/MyFolder/"
      

      【讨论】:

      【解决方案5】:

      检查权限喜欢

      //区域[权限]

      public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      public static boolean CheckPermission(final Context context){
          int currentAPIVersion = Build.VERSION.SDK_INT;
          if( currentAPIVersion >= Build.VERSION_CODES.M){
              if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                  if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
                      AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
                      alertBuilder.setCancelable(true);
                      alertBuilder.setTitle("Permission necessary");
                      alertBuilder.setMessage("External storage permission is necessary");
                      alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                          @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
                          public void onClick(DialogInterface dialog, int which) {
                              ActivityCompat.requestPermissions((Activity) context,
                                      new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                          }
                      });
                      AlertDialog alert = alertBuilder.create();
                      alert.show();
                  } else {
                      ActivityCompat.requestPermissions((Activity) context,
                              new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                  }
                  return false;
              } else {
                  return true;
              }
          } else {
              return true;
          }
      }
      
      //endregion
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-20
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        相关资源
        最近更新 更多