java - 如何解析从 list 中的 Intent 过滤器接收到的内容数据?

标签 java android xml android-manifest intentfilter

kml 文件有一个 intent 过滤器可以工作,但我必须以内容方案的形式接收数据。 该文件是从 File Commander 中选取的。

数据

content://com.mobisystems.fileman.RemoteFiles/ZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvTG9jYXRpb24lMjBUcmFja2luZy8yMDE5LTA0LTA0JTIwMTclM0EyNyUzQTU5Lmtt/bA/0

现在的问题是如何读取这个文件? 我该如何处理这个问题? 任何帮助将不胜感激。

到目前为止我已经尝试过了

var uri = Uri.parse(trackString) 

FileInputStream(contentResolver.openFileDescriptor(uri, "r").fileDescriptor) 

contentResolver.openInputStream(uri) // not working

manifest.xml

<!--Mime type set -->
            <intent-filter>

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="content" />

                <!-- Valid mime types -->
                <data android:mimeType="application/vnd.google-earth.kml+xml" />
                <data android:mimeType="application/vnd.google-earth.kmz" />
                <data android:mimeType="application/gpx+xml" />

                <!-- Invalid mime types used by some bad software -->
                <data android:mimeType="application/kml" />
                <data android:mimeType="application/kmz" />
                <data android:mimeType="application/gpx" />

                <data android:mimeType="application/kml+xml" />
                <data android:mimeType="application/kmz+xml" />

                <data android:mimeType="application/vnd.google-earth.kml" />
                <data android:mimeType="application/vnd.google-earth.gpx" />
                <data android:mimeType="application/vnd.google-earth.kmz+xml" />
                <data android:mimeType="application/vnd.google-earth.gpx+xml" />

                <data android:mimeType="text/kml" />
                <data android:mimeType="text/kmz" />
                <data android:mimeType="text/gpx" />

                <data android:mimeType="text/kml+xml" />
                <data android:mimeType="text/kmz+xml" />
                <data android:mimeType="text/gpx+xml" />

                <data android:mimeType="text/xml+kml" />
                <data android:mimeType="text/xml+kmz" />
                <data android:mimeType="text/xml+gpx" />

            </intent-filter>

            <!-- Mime type not set but valid extensions -->
            <intent-filter>

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />


                <data android:scheme="content" />

                <data android:host="*" />

                <data android:pathPattern="/.*..*..*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*\\.gpx" />
                <data android:pathPattern="/.*..*\\.kml" />
                <data android:pathPattern="/.*..*\\.kmz" />
                <data android:pathPattern="/.*\\.gpx" />
                <data android:pathPattern="/.*\\.kml" />
                <data android:pathPattern="/.*\\.kmz" />

            </intent-filter>

            <!-- Invalid mime type but valid extensions -->
            <intent-filter>

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />


                <data android:scheme="content" />

                <data android:host="*" />
                <data android:mimeType="*/*" />

                <data android:pathPattern="/.*..*..*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*..*\\.gpx" />
                <data android:pathPattern="/.*..*..*\\.kml" />
                <data android:pathPattern="/.*..*..*\\.kmz" />
                <data android:pathPattern="/.*..*\\.gpx" />
                <data android:pathPattern="/.*..*\\.kml" />
                <data android:pathPattern="/.*..*\\.kmz" />
                <data android:pathPattern="/.*\\.gpx" />
                <data android:pathPattern="/.*\\.kml" />
                <data android:pathPattern="/.*\\.kmz" />

            </intent-filter>

更新

最后它起作用了,我通过 intent 传递了 uri.path 而不是 uri 并得到了错误的 Uri.Parsing,所以继续检查那个错误

contentResolver.openInputStream(uri) // works

最佳答案

使用 ContentResolver和:

  • getType()找出内容的 MIME 类型(因为你的 <intent-filter> 支持很多类型)
  • openInputStream()阅读内容

你得到一个 ContentResolver调用getContentResolver()Context 上.

关于java - 如何解析从 list 中的 Intent 过滤器接收到的内容数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55518019/

相关文章:

java - LibGdx 如何编程 HP Bar?

Android - 动态添加底部导航 View

c# - 尽管以 UTF-8 编写 XML,但在 XmlElement 中转义 Unicode 字符串

javascript - 是否可以在浏览器中从 json 创建 xml,然后下载该 xml?

java - BufferedInputStream 读取与 IOUtils toByteArray 比较

java - 为什么 Iterators.size() 使迭代器为空?

java - 如何正确管理 Kubernetes 中的 Java Spring 应用程序自动缩放?

android - Ionic 上的任务 ':processDebugResources' 执行失败

android - 如何手动将库添加到react-native项目中?

java - 使用命名空间但没有前缀的 JAXB 解码