使用 Crosswalk,我有一个非常方便的 javascript-to-app 界面,因此我可以从 javascript 调用 java 函数并将我的 webapp 中的数据共享到我的 android 应用程序。
如何使用自定义选项卡(或受信任的 Web 活动)实现此目的?
似乎根本没有办法。应该有,尤其是当我的应用程序和我的游戏/网络应用程序来自同一作者时。
例如,我不信任 LocalStorage,尤其是现在使用自定义选项卡时,它可能会被清理,或者用户可能会卸载浏览器并安装另一个浏览器,因此保存的数据将丢失,并且用户会对应用程序感到愤怒保存的数据丢失,甚至不知道数据在浏览器中,而不是在应用程序中。所以我曾经让我的 webapps 调用该应用程序来保存数据。
另一个例子,当自定义选项卡使用 Firefox 而不是 Chrome 时,语音合成将不可用。我可以在我的 webapp 中轻松检测到它。但我希望我的 webapp 调用该应用程序并将其发送给发音的单词。这就是我对 Crosswalk 所做的,因为它也不支持语音。
我知道 webviews 比自定义选项卡更适合我的使用,但是当 webview 不能在设备上使用(尤其是 Android <5)时,我的应用程序除了打开自定义选项卡之外没有很多其他选项(或受信任的 Web 活动,如果可用)。我不能再使用 Crosswalk,它已停产,但仍然充满严重的错误。而 GeckoView 或阿里巴巴 Gcanvas 等其他解决方案还没有准备好。
编辑:
在这篇关于可信网络活动https://developers.google.com/web/updates/2017/10/using-twa的文章中,我阅读了
不过,您可以通过在 URL 中将数据传入和传出页面来协调 Web 内容(例如,通过查询参数、自定义 HTTP 标头和意图 URI)。
编辑:
我已经阅读了很多页面,但意图和深层链接对我来说仍然很模糊,但这是我尝试过的。
我为自定义操作添加了一个意图过滤器:
<receiver android:name=".OutgoingReceiver" android:enabled="true">
<intent-filter>
<action android:name="custom_tabs_js_interface" />
</intent-filter>
</receiver>
我为那个接收器创建了一个类:
public class OutgoingReceiver extends BroadcastReceiver {
public static final String CUSTOM_INTENT = "custom_tabs_js_interface";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received" , Toast.LENGTH_SHORT).show();
}
我用javascript调用它
location.href="intent:#Intent;action=custom_tabs_js_interface;end";
我现在什至不传递数据,我只是尝试调用它。但什么也没有发生……