假设我想定义一个 URI,例如:
myapp://path/to/what/i/want?d=This%20is%20a%20test
必须由我自己的应用程序或服务处理。请注意,该方案是"myapp"和不是"http",或"ftp"。这正是我的意图:为 Android 操作系统全局定义我自己的 URI 架构。这可能吗?
"myapp"
"http"
"ftp"
这有点类似于某些程序已经在 Windows 系统上所做的事情,例如 Skype ( skype://) 或任何 torrent 下载程序 ( torrent://)。
skype://
torrent://
这是很有可能的;您使用<data>元素在 AndroidManifest.xml 中定义 URI 方案。您设置了一个填充了元素的意图过滤器<data>,您将能够创建自己的方案。(更多关于意图过滤器和意图解析在这里。)
<data>
这是一个简短的示例:
<activity android:name=".MyUriActivity"> <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="myapp" android:host="path" /> </intent-filter> </activity>
根据隐式意图的工作方式,您还需要定义至少一个动作和一个类别;在这里,我选择了 VIEW 作为动作(尽管它可以是任何东西),并确保添加 DEFAULT 类别(因为这是所有隐式意图所必需的)。还要注意我是如何添加 BROWSABLE 类别的 - 这不是必需的,但它允许您的 URI 可以从浏览器打开(一个漂亮的功能)。