我正在使用以下库:androidx.browser:browser:1.5.0当前场景:我的应用程序包含一个按钮,单击该按钮时,会使用 Chrome 自定义选项卡启动 URL。问题是当使用...
我正在使用以下库: androidx.browser:browser:1.5.0
p2
p3
我尝试使用 CustomTabsSession 并将其添加到 CustomTabsIntent
,这样每次启动 URL 时,我都会检查会话是否为空。如果是,我将重用之前创建的自定义选项卡。但不幸的是,它不起作用!检查下面的代码(当单击应该启动 URL 的按钮时,将调用以下方法):
注意: 清单中的 MainActivity
“我的” singleInstance
.
private void initCustomTabs() {
if (customTabsSession == null) {
customTabsServiceConnection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {
customTabsClient = client;
customTabsSession = customTabsClient.newSession(null);
launchCustomTab(myURL);
}
@Override
public void onServiceDisconnected(ComponentName name) {
customTabsClient = null;
customTabsSession = null;
}
};
CustomTabsClient.bindCustomTabsService(MainActivity.this, "com.android.chrome", customTabsServiceConnection);
} else {
launchCustomTab(myURL);
}
}
private void launchCustomTab(String url) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setSession(customTabsSession);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
}
不要在每次连接时都创建新会话,而只需创建一次,此外(当知道时 CustomTabsSessionToken sessionToken
)使用方法 postMessage()
。该方法的签名显示了如何使用它:
@CustomTabsService.Result
protected abstract int postMessage(
@NonNull CustomTabsSessionToken sessionToken,
@NonNull String message,
@Nullable Bundle extras
)
虽然您的代码似乎没有考虑任何 CustomTabsSessionToken
,但可以使用方法 getSessionTokenFromIntent()
。不要与 CustomTabsSession
。基本上,可以使用会话令牌控制自定义选项卡活动。 WebView
将是相同的实例, Activity
并且确实更容易加载这个或那个URL,而不必担心打开太多 Intent.FLAG_ACTIVITY_SINGLE_TOP
,因为您在那里有它。