如何实现我自己的URI方案在安卓
-
20-09-2019 - |
题
说我要定义一个URI如:
myapp://path/to/what/i/want?d=This%20is%20a%20test
必须由我自己的应用程序,或服务。注意到方案 "myapp"
而不 "http"
, 或 "ftp"
.这正是我打算:定义我自己的URI架构的全球。这可能吗?
这有点类似于为什么有些方案已经这样做了,例如Windows系统,例如Skype(skype://
)或任何torrent下载程序(torrent://
).
解决方案
这是非常可能的;您在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>
由于每个工作,则需要意图如何隐式,以限定至少一个动作和一个类别为好;在这里我拿起观为行动(虽然它可以是任何东西),并确保添加DEFAULT类别(因为这是必需的所有隐含的意图)。还要注意我如何添加类别BROWSABLE - 这是没有必要的,但它可以让你的URI是从浏览器(一个漂亮的功能)打开
其他提示
补充了 @DanielLew 回答,得到parameteres的值,你必须这样做:
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");
}
我强烈建议你不自己定义的方案。这违背的网标准URI计划,它试图硬性控制那些名字中有很好的理由--避免的名字之间的冲突不同的实体。一旦你把一个链接到你的方案在网站上,你已经把那个小名称纳入整个整个互联网的命名空间,应该是以下这些标准。
如果你只是希望能够有一个链接到你自己的应用程序,我建议你按照该办法,我所描述的在这里:
要圣地亚哥的另一个可选的方法是使用一个库:
https://github.com/airbnb/DeepLinkDispatch
您可以轻松地声明要处理的URI和你想通过注释上的活动提取的参数,如:
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
作为加,查询参数也将沿向活动传递以及
随着问题是几年前问过了,Android是发展这个URI方案很多。结果 从原始的URI方案,通过深层链接,而现在Android应用程序链接。
Android现在推荐使用HTTP网址,而不会定义自己的URI方案。由于Android的应用链接使用HTTP网址链接到您自己的网站域名,所以没有其他应用程序可以使用你的链接。您可以检查深层链接和Android应用程序的链接从比较这里
现在,你可以通过使用Android Studio的选项很容易地添加URI方案:工具>程序链接助理。 请参考具体到Android文档: https://developer.android。 COM /工作室/写/ APP-链路indexing.html