当前位置: 首页 > 知识库问答 >
问题:

Android扩展文件下载器-写入权限?

施自怡
2023-03-14

我的Android扩展文件下载器无法工作。我发现,问题发生在原来的downloadthread.java中,我已经验证了该外部媒体已经挂载。

private void writeDataToDestination(State state, byte[] data, int bytesRead)
        throws StopRequest {
    for (;;) {
        try {
            if (state.mStream == null) {
                state.mStream = new FileOutputStream(state.mFilename, true);
            }
            state.mStream.write(data, 0, bytesRead);
            // we close after every write --- this may be too inefficient
            closeDestination(state);
            return;
        } catch (IOException ex) {
            if (!Helpers.isExternalMediaMounted()) {
                throw new StopRequest(DownloaderService.STATUS_DEVICE_NOT_FOUND_ERROR,
                        "external media not mounted while writing destination file");
            }
...
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

...
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name_short"
        android:supportsRtl="true"
        android:requestLegacyExternalStorage="true"
        android:preserveLegacyExternalStorage="true"
        android:theme="@style/AppTheme">
...
apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"
    useLibrary 'org.apache.http.legacy'

    signingConfigs {
        Signed {
            keyAlias ...
            keyPassword ...
            storeFile file(...)
            storePassword ...
        }
    }

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30
        ndk {
            debugSymbolLevel 'FULL'
        }
    }
...

我完全卡住了,无法继续下去。我能做什么?

共有1个答案

白哲茂
2023-03-14

你应该请求许可

 private void checkWriteStoragePermission()
{
    ArrayList<String> permissions = new ArrayList<>();
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
    {
        permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
    {
        permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
    }

    if (permissions.size() > 0)
    {
        ActivityCompat.requestPermissions(this, permissions.toArray(new String[permissions.size()]), Constants.WRITE_EXTERNAL_STORAGE());
    }
    
}

并使用request_install_packages权限访问Android/obb目录。

 类似资料:
  • 问题内容: 我正在创建一个扩展程序,它将从网站上下载mp3文件。我正在尝试通过创建带有指向mp3文件的链接的新标签来实现此目的,但是chrome会继续在播放器中打开它而不是下载它。有什么方法可以创建一个弹出窗口,要求用户“另存为”文件? 问题答案: 快进了3年,现在GoogleChrome提供了API(自Chrome31起)。 在清单中声明许可后,可以通过以下调用启动下载: 如果要在脚本中生成文件

  • 我正在使用从SDk下载的示例apk扩展文件。我的主扩展文件大小约为5MB,格式为。 我将我的应用程序作为草稿应用程序和扩展文件一起上传到play store。但问题是,当扩展文件下载进度时,会在“Android/obb/mypack”下创建一个包名称的文件夹。但是该文件夹中没有这样的文件。 有时下载开始时,我从playstore收到消息。 这应该是什么原因呢?文件名格式有问题吗?谁能帮帮我吗。

  • 所以我复制了Android的扩展包示例,并根据谷歌提供的指南运行。我成功地通过存储一个本地。obb文件,但我无法设法让它与下载。obb文件。状态更改为,但找不到文件。 我经历过的步骤: 使示例运行(更新为,,) 使用本地. obb文件成功测试。 制作apk并上传到与扩展文件一起玩。 安装签名apk并运行app。 请帮助下载扩展文件。 编辑:在第4步,我现在下载失败,因为找不到资源。 编辑2:所以在

  • 我试图在android中写入文件,但一直出现以下错误: java.io.FileNotFoundException: /storage/emulated/0/Notes/TestFile.txt(权限拒绝) 搜索此网站可以简单地解决此问题,即向应用程序清单文件添加WRITE\u EXTERNAL\u存储,但这对我不起作用。我一直在犯同样的错误。

  • 所以我试图从一个文件中获取扩展名,这样我就可以将它与一个字符串进行比较,看看扩展名是否与我要查找的扩展名匹配。然而,目前我认为我能够得到扩展,但然后比较它与我想要找到的是导致我的应用程序崩溃和关闭立即。此外,我希望它能够处理没有扩展名的文件,只是将它们冒充为与所需的文件扩展名不匹配的文件。下面是执行此操作的代码片段,希望有人能向我解释我在这里做错了什么。 附注:我是Java和Android开发的新