我将首先给出我的用例。我有两个类似的 android studio 项目需要始终打开。现在发生的事情是,我经常在错误的项目中进行更改,因为没有简单的方法可以通过简单地查看 UI 来识别我在哪个项目(除了查看顶部的项目名称 - 它会在全屏模式下消失) . 因此,如果我可以在一个项目上使用德古拉主题而在另一个项目上使用默认主题,那就太好了。有什么方法可以实现它。
使用Crosswalk,我有一个非常方便的javascript-app界面,因此我可以从javascript调用Java函数,并将Webapp的数据共享到android应用程序。
如何通过“自定义标签”(或“受信任的网络活动”)实现此目标?
似乎根本没有办法。应该有,尤其是当我的应用程序和游戏/网络应用程序来自同一作者时。
例如,我不信任LocalStorage,尤其是现在带有“自定义选项卡”的LocalStorage,它可能会被清理,或者用户可能会卸载浏览器并安装另一个浏览器,因此保存的数据将丢失,并且用户会对该应用程序感到恼火丢失保存的数据,甚至不了解数据在浏览器中,而不在应用程序中。所以我以前让我的Web应用程序调用该应用程序以保存数据。
另一个示例,当“自定义标签”使用Firefox而不是Chrome时,语音合成将不可用。我可以在我的webapp中轻松检测到它。但我希望我的Web应用程序调用该应用程序并将其发音发送给它。这就是我对Crosswalk所做的事情,因为它也不支持语音。
我知道Web视图比“自定义标签”更适合我使用,但是当无法在设备(尤其是Android <5)上使用Web视图时,除了打开“自定义标签”外,我的应用没有很多其他选择(或信任的网络活动,如果可用)。我再也不能使用Crosswalk了,它已经停产并且仍然充满严重的错误。其他解决方案(如GeckoView或阿里巴巴Gcanvas)尚未准备就绪。
编辑:
在这篇关于可信网络活动的文章https://developers.google.com/web/updates/2017/10/using-twa中,我阅读了
不过,您可以通过在URL中与页面之间传递数据来与 Web内容进行协调(例如,通过查询参数,自定义HTTP标头和意图URI)。
编辑:
我已经阅读了许多页面,尽管Intent和深层链接对我来说仍然很晦涩,但是这就是我尝试过的方法。
我为自定义操作添加了一个意图过滤器:
<receiver android:name=".OutgoingReceiver" android:enabled="true">
<intent-filter>
<action android:name="custom_tabs_js_interface" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我为该接收器创建了一个类:
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();
}
Run Code Online (Sandbox Code Playgroud)
我用javascript来称呼它
location.href="intent:#Intent;action=custom_tabs_js_interface;end";
Run Code Online (Sandbox Code Playgroud)
我什至不传递数据,我只是尝试调用它。但是什么也没发生...
android deep-linking android-intent chrome-custom-tabs trusted-web-activity