奥利奥-阻止ACTION_GET_CONTENT使用内置文件应用

时间:2019-01-26 12:59:03

标签: android android-intent android-8.0-oreo

我的应用程序从用户选择的文件中读取信息(然后使用它进行奇怪而美妙的事情!)。为简单起见,“文件资源管理器”应用程序指向特定的起始目录(该应用程序先前已在其中存储此类文件)。

这很好,在我的Oreo手机上除外(Nexus5),即使在存在备用文件管理器应用程序的情况下,始终会启动内置的Google应用程序“文件”。 文件不响应意图的uri ;因此,用户每次必须导航到该目录。以下是相关代码:

   Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
   Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()
            +  "/Documents/" + getResources().getString(R.string.app_name));
   intent.setDataAndType(uri, "text/plain");

   try {
       startActivityForResult(Intent.createChooser(intent, "Open folder"), request_code);
   }
   catch (android.content.ActivityNotFoundException ex)
   {
       Toast.makeText(this, "Please install a File Manager.",
                Toast.LENGTH_SHORT).show();
   }

我徒劳地寻找解决方案。如何解决?

我感兴趣的选项:

  1. 禁用文件
  2. 防止使用文件的意图
  3. 与文件对话,以便打开指定的目录
  4. 强制意图使用其他文件浏览器应用程序(这将是应用程序的首选项)
  5. 任何其他不涉及使用文件选择器库的解决方案

1 个答案:

答案 0 :(得分:1)

  

为简单起见,“文件资源管理器”应用程序指向特定的起始目录(该应用程序以前曾存储过此类文件)。

抱歉,没有Intent动作。

  

除了在我的Oreo手机(Nexus5)上运行外,其他方法都可以正常运行

它将在数亿个设备上失败。 ACTION_GET_CONTENT不需要Uri。引用the documentation

  

请注意,意图中未提供URI,因为对返回的数据最初来自何处没有限制。

还请注意,ACTION_GET_CONTENT不一定必须包含文件浏览器,设备也不必具有文件浏览器应用程序。

  

文件不响应意图的uri;

ACTION_GET_CONTENT实现不应响应Uri

  

任何其他不涉及使用文件选择器库的解决方案

编写您自己的文件选择器UI。或者,从您的应用程序中删除该功能。