【问题标题】:ioexception when opening uri from external app从外部应用程序打开 uri 时出现 ioexception
【发布时间】:2017-10-23 05:56:29
【问题描述】:

从活动 1 开始,我使用了一个意图

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("*/*"); 
try{
    startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUEST_CODE_UPLOAD_FILE_FOR_IMPORT);
    }catch (android.content.ActivityNotFoundException ex){
           Log.e("Error","FileManager not found!");
           }

并处理 URI 并从文档中提取数据。一旦这样做,我将提取的数据和 URI 传递给活动 2,用户可以在其中看到数据。用户还可以选择从活动 2 打开原始文件,我执行以下操作:

public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW, getUri());
                PackageManager packageManager = activity.getPackageManager();
                List activities = packageManager.queryIntentActivities(intent,
                        PackageManager.MATCH_DEFAULT_ONLY);
                boolean isIntentSafe = activities.size() > 0;
                if(isIntentSafe){
                    startActivity(intent);
                }
            }

但我选择的任何外部应用程序都会出现 io 异常。如何让他们打开我的文档?

【问题讨论】:

  • IOException 通常表示加载文件或资源时出现问题。由于某种原因,您的应用无法读取所选文件。要确定原因,需要更多信息。
  • 我让用户选择文档,特别是电子表格。我已经检查该文件是否为电子表格,并且在我自己的应用程序中,它工作正常。当我将 Uri 传递给另一个应用程序时,该应用程序显示 IO 异常
  • 看起来第二个应用程序没有读取文件的权限
  • 文件在我的内部存储中,我可以在那个应用程序中单独打开它们。仅当我从我的应用程序传递 Uri 时才会发生这种情况
  • the files are in my internal storage, and I can open them separately in that app。你的意思是:我的应用获得了许可,我可以在同一个应用中打开它。

标签: android file android-intent uri ioexception


【解决方案1】:

看起来第二个应用没有读取文件的权限。

对于阅读电子表格,Google 有相同的 API。API DetailsSpreadsheet Service 可能会对您有所帮助。

【讨论】:

  • 我需要让用户选择他选择的任何应用程序,就像用户从文件浏览器中选择文件时一样,并且操作系统向我们显示可以打开文件的应用程序列表
  • 原因可能是您传递给意图的 URI。由于操作系统版本和设备,我们可以有不同的 uri。
猜你喜欢
  • 2011-12-16
  • 2017-02-15
  • 2020-12-05
  • 2015-11-26
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多