2017-08-04 591 views
0

我需要我的用户从他们的外部文件中选择一个备份文件(以进行还原),并且有两个问题。Android:如何在ACTION_GET_CONTENT中设置初始目录

  1. 我给我写.sbu的扩展备份文件,我无法弄清楚如何使ACTION_GET_CONTENT意图的文件浏览器,仅过滤.sbu文件。尽管如此,我将意图类型设置为*/*

  2. 另一个更重要的问题是,当我的INTENT打开默认文件浏览器时,我请求帮助它设置默认初始目录。以下是我目前的代码,但似乎不起作用。

    Intent ioIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    ioIntent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/simple_information_manager/backup")), "*/*"); 
    ioIntent.addCategory(Intent.CATEGORY_OPENABLE); 
    ioIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
    
    if (ioIntent.resolveActivityInfo(parent.getPackageManager(), 0) != null) { 
        doExit = false; 
        startActivityForResult(Intent.createChooser(ioIntent, getString(R.string.choose_file)), RESTORE); 
    } else { 
        Snackbar.make(listView.getRootView(), "Directory chooser not available", Snackbar.LENGTH_LONG).show(); 
    } 
    

回答

0

我给我写.sbu的扩展备份文件,我无法弄清楚如何使ACTION_GET_CONTENT意图的文件浏览器,只能过滤.sbu文件

这是不可能的。

集时我的意图打开默认的文件浏览器

没有什么在ACTION_GET_CONTENT协议这个默认的初始目录。很大程度上,这是因为ACTION_GET_CONTENT没有绑定到文件和目录。

此外,没有“默认文件浏览器”,特别是在Android 4.3及更早版本上。您可以争辩说Storage Access Framework UI填补了这一角色,但我倾向于将其更多地视为与桌面操作系统和相关平台的“文件打开”和“文件保存”对话框相当的Android。

你有行动的两个主要课程:

  1. 停止在文件,扩展名,目录的角度思考,并坚决进入思考的内容。在这种情况下,你可以在Android 4.4+上使用use ACTION_OPEN_DOCUMENT。它提供EXTRA_INITIAL_URI,这让人想起你的“默认初始目录”请求。

  2. 停止考虑使用Intent,而不是use a file/directory chooser library。那些内容来源不灵活,但它们更适合您的文件/目录思维模式,并且可能提供更符合您的期望的功能。

+0

我的应用处理敏感数据,我宁愿不去与外部库。我对图书馆没有太多的想法,因为这是我的第一个应用程序。图书馆是否需要额外的权限或在任何程度上都是用户的安全问题?到目前为止,我的应用程序必须使用Zero权限,并且我将首次添加外部存储写入权限以实现备份数据。 –

+0

@Shahid:从安全的角度来看,一个库与你自己的代码没有区别。 – CommonsWare