我们能否通过intent打开下载文件夹?

22

实际上,我需要从我的应用程序中打开默认下载文件夹。是否可能?如果是,请提供一些参考资料。

我可以通过以下方式获取下载文件夹的路径:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

非常感谢任何帮助。

3个回答

64
您可以使用以下Intent来显示最近的下载活动。
startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));

自API 9起可用


1
嗨,Ion Aalbers,感谢您的回复。有没有任何方法(Intent)可以从下载文件夹中选择文件? - abhishek kumar gupta
@abhishekkumargupta 你想用这个文件做什么?打开它吗? - Ion Aalbers
@Tzegenos 这是因为“下载应用程序仅显示通过DownloadManager下载的下载,而不是目录中的所有文件”,https://dev59.com/52Ij5IYBdhLWcg3wPy4a#20472865 - madim
在编写文件后,如果我使用startActivity(Intent(DownloadManager.ACTION_VIEW_DOWNLOADS))以编程方式打开下载文件夹,则该文件不可见。但是,如果我从手机的文件浏览器中打开,则该文件可见。有任何想法,为什么会发生这种情况? - K Pradeep Kumar Reddy
有办法打开特定的下载文件夹吗?求救!! - DiLDoST
显示剩余2条评论

12

三星解决方案:

public static void openDownloads(@NonNull Activity activity) {
    if (isSamsung()) {
        Intent intent = activity.getPackageManager()
                .getLaunchIntentForPackage("com.sec.android.app.myfiles");
        intent.setAction("samsung.myfiles.intent.action.LAUNCH_MY_FILES");
        intent.putExtra("samsung.myfiles.intent.extra.START_PATH", 
                getDownloadsFile().getPath());
        activity.startActivity(intent);
    }
    else activity.startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));
}

public static boolean isSamsung() {
    String manufacturer = Build.MANUFACTURER;
    if (manufacturer != null) return manufacturer.toLowerCase().equals("samsung");
    return false;
}

public static File getDownloadsFile() {
    return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
}

通过反编译三星我的文件应用程序的dex文件,观察MainActivity如何处理意图而发现。

public static final String MYFILES_NOTIFICATION_LAUNCH_INTENT_NAME = "samsung.myfiles.intent.action.LAUNCH_MY_FILES";
public static final String NOTIFICATION_START_PATH = "samsung.myfiles.intent.extra.START_PATH";
public static final String START_PATH = "FOLDERPATH";

if (Constant.MYFILES_NOTIFICATION_LAUNCH_INTENT_NAME.equals(intent.getAction())) {
                String startNotificationPath = intent.getStringExtra(Constant.NOTIFICATION_START_PATH);
                if (startNotificationPath != null) {
                    Bundle newArgument = new Bundle();
                    newArgument.putString(Constant.START_PATH, startNotificationPath);
                    if (new File(startNotificationPath).exists()) {
                        startBrowser(513, newArgument);
                    }
                }
                intent.removeExtra(Constant.NOTIFICATION_START_PATH);
            }

1
我过去两天一直在尝试使用令人抓狂的三星文件浏览器应用程序打开文件夹。这是目前为止唯一有效的解决方案。谢谢! - 4gus71n
不用谢!我也曾经苦恼过这个问题,比我想象中的时间还要长。@4gus71n - Veedka
这是三星设备唯一可接受的答案。谢谢。 - Deepak kaku
这是三星设备唯一可接受的答案。谢谢。 - undefined
不客气,@Deepakkaku!很高兴它在5年后仍然有帮助! - Cayce Williams

0

我曾经在三星和LG手机上遇到过类似的问题,无法在下载文件夹中显示文件。后来我只需为DownloadManager添加一个文件参数“downloaded”,就可以在下载文件夹中看到文件了。

  DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        downloadManager.addCompletedDownload(file.getName(), file.getName(), true,
                "application", file.getPath(), file.length(), true);

文件来自哪里。 - Muhammad Asyraf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接