说我要定义一个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计划,它试图硬性控制那些名字中有很好的理由--避免的名字之间的冲突不同的实体。一旦你把一个链接到你的方案在网站上,你已经把那个小名称纳入整个整个互联网的命名空间,应该是以下这些标准。

如果你只是希望能够有一个链接到你自己的应用程序,我建议你按照该办法,我所描述的在这里:

如何注册的一些URL名称空间(myapp://应用程序。开始/)访问您的程序通过调用一个网址在浏览器在安卓操作系统?

要圣地亚哥的另一个可选的方法是使用一个库:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top