我希望由我的应用在android上打开csv文件。我将以下代码放入AndroidManifest中,但是将其安装在Android模拟器或手机上并尝试从存储空间中打开.csv文件时,没有任何反应。

    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="file" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.csv" />
            <data android:host="*" />
        </intent-filter>



我缺少什么让我无法从手机打开.csv文件?
如何将文件url传递到我的应用程序,以便它知道在哪里访问它?

最佳答案

我缺少什么让我无法从手机打开.csv文件?

您的意图过滤器需要进行以下更改


使用mimeType过滤器而不是pathPattern,很难用各种可能的文件名正确设置pathPattern,因为要打开csv文件,最好使用mimeType过滤器“ text / csv”来做
将方案更改为“内容”,方案文件在Android 7之后不起作用



  Android 7.0 Behavior Changes
  
  在应用之间共享文件
  对于面向Android 7.0的应用程序,Android框架会强制执行StrictMode API策略,该策略禁止在应用程序外部公开file:// URI。如果包含文件URI的意图离开您的应用程序,则该应用程序将失败,并出现FileUriExposedException异常。
  
  要在应用程序之间共享文件,您应该发送content:// URI并授予对该URI的临时访问权限。授予此权限的最简单方法是使用FileProvider类。有关权限和共享文件的更多信息,请参见共享文件。


将您的意图过滤器更改为关注,它应该起作用。

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="content" />
            <data android:mimeType="text/csv"/>
            <data android:host="*" />
        </intent-filter>

09-10 07:33
查看更多