我希望我的应用程序在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>
答案 0 :(得分:1)
我错过了什么阻止我从手机中打开.csv文件?
您的意图过滤器需要进行以下更改
使用mimeType过滤器而不是pathPattern,pathPattern很难用各种可能的文件名来解决,因为要打开csv文件最好使用mimeType过滤器“text / csv”应该做< / p>
将方案更改为“内容”,方案文件在Android 7后无效
在应用之间共享文件 对于定位到Android 7.0的应用,Android框架会强制执行StrictMode API策略,该策略禁止在应用外部公开file:// URI。如果包含文件URI的intent离开了您的应用程序,则该应用程序将失败,并显示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>
答案 1 :(得分:0)
感谢您的上述回复。有效!
现在,要从应用程序访问该文件: https://richardleggett.com/blog/2013/01/26/registering_for_file_types_in_android/
简而言之,在主文件的onCreate(Bundle savedInstanceState)方法中使用此:
val listOfProjectMaps = resultList.groupBy(t => (t._1, t._2))
.map({
case (k, v) => Map(
"id" -> k._1,
"name" -> k._2,
"projects" ->
v.groupBy(tv => tv._3.get)
.map({
case (k1, v1) =>
Map(
"name" -> k1,
"staffs" ->
v1.map(v2 => Map(
"name" -> v2._4,
"added" -> v2._5.get)))
}))
})
获得URI后,您可以使用常用代码访问该文件:
Uri uri= getIntent().getData();
然后使用BufferedReader br = new BufferedReader(new
InputStreamReader(getContentResolver().openInputStream(uri), "UTF-8"));
读取每一行:
BufferedReader
希望这有助于其他人!
答案 2 :(得分:0)
此代码对我有用:
!-- default intent filter for launching activity -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- example filter to retrieve or view plain text -->
<!-- adds a custom title and icon for the share option -->
<intent-filter
android:icon="@mipmap/icon3"
android:label="@string/app_name">
<data android:mimeType="text/csv" />
<data android:mimeType="text/comma-separated-values" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>