我希望由我的应用在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>