gpt4 book ai didi

android - Intent anchor 语法说明

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:09:06 26 4
gpt4 key购买 nike

我正在尝试使用 Intent anchor 来启动我的应用程序,如 here 所述.我能够使用此语法让它启动我的应用程序,

<a href="intent://#Intent;scheme=http;package=com.example.myapp;end">Launch my app</a>

但我不知道许多不同元素的含义。

基于 Intent 的 URI 的基本语法如下:

intent:

HOST/URI-path // Optional host 
#Intent;
package=[string];
action=[string];
category=[string];
component=[string];
scheme=[string];
end;
  1. 每个部分的含义是什么(这样我就知道如何最好地利用它们)
  2. 我如何/在哪里可以包含任何额外数据(即我自己的参数)

最佳答案

这是方法toUri()来自 Intent类:

public String toUri(int flags) {
StringBuilder uri = new StringBuilder(128);
String scheme = null;
if (mData != null) {
String data = mData.toString();
if ((flags&URI_INTENT_SCHEME) != 0) {
final int N = data.length();
for (int i=0; i<N; i++) {
char c = data.charAt(i);
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|| c == '.' || c == '-') {
continue;
}
if (c == ':' && i > 0) {
// Valid scheme.
scheme = data.substring(0, i);
uri.append("intent:");
data = data.substring(i+1);
break;
}
// No scheme.
break;
}
}
uri.append(data);
} else if ((flags&URI_INTENT_SCHEME) != 0) {
uri.append("intent:");
}
uri.append("#Intent;");
if (scheme != null) {
uri.append("scheme=").append(scheme).append(';');
}
if (mAction != null) {
uri.append("action=").append(Uri.encode(mAction)).append(';');
}
if (mCategories != null) {
for (String category : mCategories) {
uri.append("category=").append(Uri.encode(category)).append(';');
}
}
if (mType != null) {
uri.append("type=").append(Uri.encode(mType, "/")).append(';');
}
if (mFlags != 0) {
uri.append("launchFlags=0x").append(Integer.toHexString(mFlags)).append(';');
}
if (mPackage != null) {
uri.append("package=").append(Uri.encode(mPackage)).append(';');
}
if (mComponent != null) {
uri.append("component=").append(Uri.encode(
mComponent.flattenToShortString(), "/")).append(';');
}
if (mSourceBounds != null) {
uri.append("sourceBounds=")
.append(Uri.encode(mSourceBounds.flattenToString()))
.append(';');
}
if (mExtras != null) {
for (String key : mExtras.keySet()) {
final Object value = mExtras.get(key);
char entryType =
value instanceof String ? 'S' :
value instanceof Boolean ? 'B' :
value instanceof Byte ? 'b' :
value instanceof Character ? 'c' :
value instanceof Double ? 'd' :
value instanceof Float ? 'f' :
value instanceof Integer ? 'i' :
value instanceof Long ? 'l' :
value instanceof Short ? 's' :
'\0';
if (entryType != '\0') {
uri.append(entryType);
uri.append('.');
uri.append(Uri.encode(key));
uri.append('=');
uri.append(Uri.encode(value.toString()));
uri.append(';');
}
}
}
uri.append("end");
return uri.toString();
}

如果您可以阅读 Java 代码,那么应该很清楚这里发生了什么。在任何情况下,附加内容都可以放在 URL 中,它们看起来像这样:

<type>.<key>=<value>;

哪里<type>是以下之一:

S = String
B = Boolean
b = Byte
c = Character
d = Double
f = Float
i = Integer
l = Long
s = Short

这里有几个例子:

启动应用程序:

<a href="intent://#Intent;scheme=http;package=com.example.myapp;end"> 

使用一个名为“foo”的额外字符串启动应用程序,其中包含值“bar123”:

<a href="intent://#Intent;scheme=http;package=com.example.myapp;S.foo=bar123;end"> 

用一个名为“foo”的字符串 extra 包含值“bar123”和一个名为“number”的整数 extra 包含值“-567”启动应用程序:

<a href="intent://#Intent;scheme=http;package=com.example.myapp;S.foo=bar123;i.number=-567;end"> 

关于android - Intent anchor 语法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com