pun*_*nie 159 browser android uri intentfilter android-intent
假设我想定义一个URI,例如:
myapp://path/to/what/i/want?d=This%20is%20a%20test
Run Code Online (Sandbox Code Playgroud)
必须由我自己的应用程序或服务处理.请注意,该方案"myapp",而不是"http",或"ftp".这正是我的意图:为Android OS全局定义自己的URI架构.这可能吗?
这有点类似于某些程序已经在做的事情,例如Windows系统,例如Skype(skype://)或任何torrent下载程序(torrent://).
Dan*_*Lew 212
这是非常可能的; 您可以使用该<data>元素在AndroidManifest.xml中定义URI方案.您设置了一个<data>填充了元素的intent过滤器,您将能够创建自己的方案.(更多关于意图过滤器和意图解决方案.)
这是一个简短的例子:
<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>
Run Code Online (Sandbox Code Playgroud)
根据隐式意图的工作原理,您还需要定义至少一个动作和一个类别; 在这里我选择了VIEW作为动作(虽然它可以是任何东西),并确保添加DEFAULT类别(因为这是所有隐含意图所必需的).另请注意我是如何添加类别BROWSABLE的 - 这不是必需的,但它允许您的URI可以从浏览器打开(一个漂亮的功能).
Die*_*mar 66
补充@DanielLew答案,要获得参数值,您必须这样做:
URI示例: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
在你的活动中:
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
String valueOne = uri.getQueryParameter("keyOne");
String valueTwo = uri.getQueryParameter("keyTwo");
}
Run Code Online (Sandbox Code Playgroud)
hac*_*bod 25
我强烈建议您不要定义自己的方案.这违背了URI方案的Web标准,它试图严格控制这些名称,以避免不同实体之间的名称冲突.一旦你在网站上放置了你的方案的链接,你就把这个小名字放在整个互联网的命名空间中,并且应该遵循这些标准.
如果您只想拥有自己应用的链接,我建议您按照我在此描述的方法:
如何通过在Android OS中的浏览器中调用URL来注册一些URL命名空间(myapp://app.start/)来访问您的程序?
正如几年前提出的问题一样,Android 在这个 URI 方案上已经发展了很多。
从最初的URI方案,到深层链接,再到现在的Android应用程序链接。
Android 现在建议使用 HTTP URL,而不是定义您自己的 URI 方案。由于 Android 应用程序链接使用链接到您拥有的网站域的 HTTP URL,因此其他应用程序无法使用您的链接。您可以从这里查看深层链接和 Android App 链接的比较
现在,您可以使用 Android Studio 选项轻松添加 URI 方案:工具 > 应用程序链接助手。详情请参考Android文档:https://developer.android.com/studio/write/app-link-indexing.html
迭戈的另一种替代方法是使用库:
https://github.com/airbnb/DeepLinkDispatch
您可以轻松声明要处理的URI以及要通过Activity上的注释提取的参数,例如:
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
Run Code Online (Sandbox Code Playgroud)
另外,查询参数也将传递给Activity.
| 归档时间: |
|
| 查看次数: |
166966 次 |
| 最近记录: |