【问题标题】:Android 11 can't load pdf fileAndroid 11 无法加载 pdf 文件
【发布时间】:2022-01-21 16:35:12
【问题描述】:

在我的应用程序中,我无法加载 pdf 文件。我可以从同一个文件夹加载另一个文件(图像),但是当我尝试加载 pdf 文件时,我得到java.io.FileNotFoundException: /storage/emulated/0/DCIM/1.pdf: open failed: EACCES (Permission denied),但是当我加载图像时我没有得到这样的欺骗。 我拥有所有权限:

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" /> 
android:requestLegacyExternalStorage="true"

【问题讨论】:

  • 谁把那个文件放在那个文件夹里的?你的应用?
  • @blackapps,是的。
  • 那你的问题就没有意义了。如果应用程序可以在目录中创建文件,那么它当然可以读取它。有没有你没有告诉的事情?
  • 这能回答你的问题吗? Adroid 11: can't load file from external storage
  • @DrHowdyDoo,是的,它有帮助。但我仍然无法加载 pdf/txt 文件。

标签: android downloadfile


【解决方案1】:

在 Android 11 中,外部存储受到限制。尝试这个 https://developer.android.com/training/data-storage/app-specific

【讨论】:

    【解决方案2】:

    1.尝试使用file Provider

    2.FileProvider 是 ContentProvider 的一个特殊子类,它通过为文件创建 content:// Uri 而不是 file:/// Uri,从而促进与应用关联的文件的安全共享。

    3 它应该可以工作

    【讨论】:

      【解决方案3】:

      目前的快速解决方法是请求MANAGE_EXTERNAL_STORAGE 许可。

      首先在您的 xml 文件中添加此权限:

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

      然后在运行时请求它:

      private void requestPermission() {
      if (SDK_INT >= Build.VERSION_CODES.R) {
          try {
              Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
              intent.addCategory("android.intent.category.DEFAULT");
              intent.setData(Uri.parse(String.format("package:%s",getApplicationContext().getPackageName())));
              startActivityForResult(intent, 2296);
          } catch (Exception e) {
              Intent intent = new Intent();
              intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
              startActivityForResult(intent, 2296);
          }
      } else {
          //below android 11
          ActivityCompat.requestPermissions(PermissionActivity.this, new String[]{WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
      }
      }
      

      这应该可以解决您的问题,但我强烈建议您了解范围存储并使用它将您的 pdf 存储在您的应用程序特定目录中,以便您无需任何权限即可轻松访问它们。

      Access app-specific files

      Scoped storage

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        相关资源
        最近更新 更多