是否可以向来自 HTML 的可浏览意图添加额外内容
Is it possible to add extras to browsable intents from HTML
让我们假设以下清单:
<intent-filter>
<data scheme="myscheme"
host="myhost">
</data>
<action name="android.intent.action.VIEW">
</action>
<category name="android.intent.category.DEFAULT">
</category>
<category name="android.intent.category.BROWSABLE">
</category>
</intent-filter>
我可以启动 activity,它在上述意图过滤器下通过将浏览器重定向到声明:
myscheme://myhost?param1=param1¶m2=param2
但是,我正在努力理解是否可以进行相同的重定向,只有通过以下方式以编程方式接收的额外内容:
myextra = getIntent().getStringExtra('myextra')
非常感谢任何帮助。
将数据直接从网页传递到您的应用程序的唯一方法是在您在 intent-filter
中注册的 URL 上。所有都将通过 Uri
对象检索 - 无论数据是在路径上还是带有查询参数,如下所述。无法通过网页在 Intent
上设置额外内容。
Uri uri = getIntent().getData();
String param1Value = uri.getQueryParameter("param1");
这就是我克服这个问题的方法,
我开发了自己的浏览器,并且可以像您一样浏览
Uri data = getIntent().getData();
if(data == null) { // Opened with app icon click (without link redirect)
Toast.makeText(this, "data is null", Toast.LENGTH_LONG).show();
}
else { // Opened when a link clicked (with browsable)
Toast.makeText(this, "data is not null", Toast.LENGTH_LONG).show();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
String link = getActualUrl(host);
webView.loadUrl(link);
Toast.makeText(this,"scheme is : "+scheme+" and host is : "+host+ " ",Toast.LENGTH_LONG).show();
}
我想你正在寻找这个功能
data.getQueryParameter(String key);
当通过 javascript 或 HTML 重定向到自定义意图方案 URL 时,可以使用 "intent scheme URL" 发送更多信息,例如额外的对象和操作。
intent://foobar/#Intent;action=myaction1;type=text/plain;S.xyz=123;end
虽然这个方法实际上并没有回答这个问题,因为方案部分注定总是 "intent",但这是一种从浏览器发送具有额外对象或操作的意图的可能方法。
在以下报告中查看更广泛的信息:
或使用 chrome 文档:
让我们假设以下清单:
<intent-filter>
<data scheme="myscheme"
host="myhost">
</data>
<action name="android.intent.action.VIEW">
</action>
<category name="android.intent.category.DEFAULT">
</category>
<category name="android.intent.category.BROWSABLE">
</category>
</intent-filter>
我可以启动 activity,它在上述意图过滤器下通过将浏览器重定向到声明:
myscheme://myhost?param1=param1¶m2=param2
但是,我正在努力理解是否可以进行相同的重定向,只有通过以下方式以编程方式接收的额外内容:
myextra = getIntent().getStringExtra('myextra')
非常感谢任何帮助。
将数据直接从网页传递到您的应用程序的唯一方法是在您在 intent-filter
中注册的 URL 上。所有都将通过 Uri
对象检索 - 无论数据是在路径上还是带有查询参数,如下所述。无法通过网页在 Intent
上设置额外内容。
Uri uri = getIntent().getData();
String param1Value = uri.getQueryParameter("param1");
这就是我克服这个问题的方法,
我开发了自己的浏览器,并且可以像您一样浏览
Uri data = getIntent().getData();
if(data == null) { // Opened with app icon click (without link redirect)
Toast.makeText(this, "data is null", Toast.LENGTH_LONG).show();
}
else { // Opened when a link clicked (with browsable)
Toast.makeText(this, "data is not null", Toast.LENGTH_LONG).show();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
String link = getActualUrl(host);
webView.loadUrl(link);
Toast.makeText(this,"scheme is : "+scheme+" and host is : "+host+ " ",Toast.LENGTH_LONG).show();
}
我想你正在寻找这个功能
data.getQueryParameter(String key);
当通过 javascript 或 HTML 重定向到自定义意图方案 URL 时,可以使用 "intent scheme URL" 发送更多信息,例如额外的对象和操作。
intent://foobar/#Intent;action=myaction1;type=text/plain;S.xyz=123;end
虽然这个方法实际上并没有回答这个问题,因为方案部分注定总是 "intent",但这是一种从浏览器发送具有额外对象或操作的意图的可能方法。
在以下报告中查看更广泛的信息:
或使用 chrome 文档: