gpt4 book ai didi

android - 如何将数据从我的 TWA 网络应用程序发送到我的应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:59 25 4
gpt4 key购买 nike

有了 Crosswalk,我有一个非常方便的 javascript-to-app 接口(interface),所以我可以从 javascript 调用 java 函数并将数据从我的 webapp 共享到我的 android 应用

如何使用自定义选项卡(或受信任的网络 Activity )实现这一点?

好像根本就没有办法。应该有,特别是当我的应用程序和我的游戏/网络应用程序来自同一作者时。

比如我不信任LocalStorage,尤其是现在有了Custom Tabs,它可能会被清理,或者用户可能会卸载浏览器并安装另一个,这样保存的数据就会丢失,用户会生气应用程序丢失了保存的数据,甚至不了解数据在浏览器中,而不是在应用程序中。所以我曾经让我的网络应用程序调用该应用程序来保存数据。

另一个例子,当自定义选项卡使用 Firefox 而不是 Chrome 时,语音合成将不可用。我可以在我的网络应用程序中轻松检测到它。但我希望我的 webapp 调用该应用程序并将单词发送给它发音。这就是我对 Crosswalk 所做的,因为它也不支持语音。

我知道 webview 比自定义选项卡更适合我使用,但是当 webview 不能在设备(尤其是 Android <5)上使用时,我的应用程序除了打开一个改为自定义选项卡(或受信任的 Web Activity ,如果可用)。我不能再使用 Crosswalk,它已经停产并且仍然充满严重的错误。而 GeckoView 或 Alibaba Gcanvas 等其他解决方案还没有准备好。

编辑:

在这篇关于可信网络 Activity 的文章中 https://developers.google.com/web/updates/2017/10/using-twa我读了

Nevertheless, you can coordinate with the web content by passing data to and from the page in URLs (e.g. through query parameters, custom HTTP headers, and intent URIs.)

编辑:

我已经阅读了很多页面,但 Intents 和深层链接对我来说仍然很模糊,但这是我尝试过的。

我为自定义操作添加了一个 Intent 过滤器:

<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";

我现在甚至不传递数据,我只是尝试调用它。但什么也没发生...

最佳答案

是的,广播接收器由于某种原因无法工作,可能是出于安全原因。但是你可以使用 Activity代替 Broadcast Receiver如下所示。

使用自定义 Android Intent Uri具有自定义主机查询参数方案 和 Intent 操作。从您的 javascript/html 代码中调用此 intent uri。例子

"intent://myhost?key=value#Intent;scheme=myscheme;package=my.app.package;action=someaction;end"

同时声明一个 activitymanifest文件 intent filter处理特定的 hostschemeaction。示例

<activity android:name="my.app.package.ReceiverActivity">
<intent-filter>
<action android:name="someaction" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="myhost"
android:scheme="myscheme" />
</intent-filter>

</activity>

现在在 Activity 中,处理 Intent 并从查询参数中提取数据。对数据做任何你想做的事,并可能完成 Activity ,以防你想返回到同一屏幕。示例

public class ReceiverActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

String value = getIntent().getData().getQueryParameter("key");
if (value != null) {
// value is basically your data
}

// in case you want to go back to same screen
finish();
}
}

就是这样。在 Android Activity 中,您有可供处理的数据。此 ReceiverActivity 可以(最好)属于同一个 TWA 应用程序。现在,通过这个Receiver Activity,您可以轻松地将数据发送/共享到任何其他应用程序。希望这会有所帮助。

关于android - 如何将数据从我的 TWA 网络应用程序发送到我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52042295/

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