Answers:
这是很有可能的。您可以使用<data>
元素在AndroidManifest.xml中定义URI方案。您设置了一个<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从浏览器中打开(一个很漂亮的功能)。
补充@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");
}
http://www.host.com/directory/value
?我们怎么能得到这个value
?
uri.getLastPathSegment();
我强烈建议您不要定义自己的方案。这与URI方案的Web标准背道而驰,后者出于正当理由试图严格控制这些名称-避免不同实体之间的名称冲突。将指向您的方案的链接放在网站上之后,您已经将那个小名字放在整个Internet的整个命名空间中,并且应该遵循这些标准。
如果您只希望能够链接到您自己的应用程序,建议您遵循此处介绍的方法:
如何通过在Android OS中的浏览器中调用URL来注册一些URL名称空间(myapp://app.start/)来访问程序?
迭戈的另一种替代方法是使用一个库:
https://github.com/airbnb/DeepLinkDispatch
您可以通过Activity上的注释轻松声明要处理的URI和要提取的参数,例如:
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
另外,查询参数也将传递给Activity。
正如几年前提出的问题,Android在此URI方案上得到了很大发展。
从原始URI方案到深层链接,再到现在的Android App链接。
Android现在建议使用HTTP URL,而不是定义自己的URI方案。由于Android应用程序链接使用链接到您拥有的网站域的HTTP URL,因此没有其他应用程序可以使用您的链接。您可以从此处检查深层链接和Android App链接的比较
现在,您可以使用Android Studio选项轻松添加URI方案:工具>应用链接助手。请参阅Android文档的详细信息:https : //developer.android.com/studio/write/app-link-indexing.html