使用文件提供程序在Android Nougat上打开下载的文件

VojtěchHořánek

嗨stackoverflow im真的很难打开在Android Nougat上下载的apk。我知道我需要使用文件提供程序,只是无法弄清楚如何输入正确的路径。应用程序崩溃或找不到文件。它总是打开/storage/emulated/0/Android/data/cf.vojtechh.apkmirror/Downloads-当然不存在。我需要该应用访问内部存储中的下载目录(类似于Environment.getExternalStorageDirectory()。getPath()+“ /” + Environment.DIRECTORY_DOWNLOADS +“ /” + fileName

有任何想法吗?我已经在整个互联网上寻找了一个多小时,但我却找不到它(我当时很生气,以至于我想把坠机留在那儿而忽略它)

MainActivity.java

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                        File apkfile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
                        Uri apkUri = FileProvider.getUriForFile(MainActivity.this, "cf.vojtechh.apkmirror.provider", apkfile);
                        String s = apkUri.toString();
                        Log.d("HERE!!",s);
                        Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
                        intent.setData(apkUri);
                        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                        startActivity(intent);

} else {
                        File apkfile = new File(Environment.getExternalStorageDirectory().getPath() + "/" + Environment.DIRECTORY_DOWNLOADS + "/" + fileName);
                        Uri apkUri = Uri.fromFile(apkfile);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
}

provider_paths.xml

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path name="Download" path="Download/"/>
    </paths>

AndroidManifest.xml

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="cf.vojtechh.apkmirror.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>
布赖恩

尝试改用该Environment#getExternalStoragePublicDirectory()方法。Context#getExternalFilesDir()是指用于应用程序专用的文件,因此包含应用程序包名称的路径(从技术上讲,此目录公共目录,但仍不是您要查找的目录)。

File downloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

然后,您可以创建File下载文件表示形式:

File apk = new File(downloads, filename);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用FileProvider在Android N上打开下载的文件

如何打开下载的文件?

如何在iOS上打开下载的文件

Symfony无法打开下载的zip文件

Cordova / PhoneGap打开下载的文件(InAppBrowser)

无法通过uri打开下载的文件

在iOS应用中打开下载的文件

在Android中下载后打开下载的文件

如何使用Android中的默认availabe应用程序在Android中打开下载的文件

Android Studio-提示使用任何可用的应用程序打开下载的文件

如何在iOS中使用app打开下载的文件?

Word 2013无法打开下载的文件(信任中心吗?)

如何始终在Outlook 2013中打开下载的文件

Firefox下载种子使我没有打开它们的应用程序-只需打开下载文件夹

使用另一个应用程序在React-Native应用程序中打开下载的文件

快捷键,用于从Chrome的下载栏中打开下载的文件(用于硒)

在asp.net中完成下载后,如何打开下载的excel文件

如何使用QWebEngineView打开下载文件对话框?

如何强制Firefox使用新的默认文件管理器(Nemo)打开下载?

在Internet Explorer中直接打开下载文件时出现文件名问题

在我的 iPad 上打开下载的应用程序的 Swift 程序

使用jQuery的each()打开下载窗口

如何通过单击按钮打开下载文件夹?

Kubuntu 12.04 Firefox和Rekong不知道如何打开下载的文件

我们可以通过打开下载文件夹吗?意图?

无法从 base64 字符串 Gmail API 打开下载的文件

阻止Chrome自动打开下载的PDF和图像文件

如何使Firefox在前台打开下载文件夹?

由于文件格式或扩展名无效,无法在网页中打开下载的文件嵌入文件链接