在我的应用程序中,我已经通过Chrome自定义选项卡打开了一个网址。我们知道,当用户点击设备返回按钮或自定义返回按钮时,Chrome自定义选项卡将被关闭。是否可以在没有用户干预的情况下自动关闭Chrome自定义选项卡。
6ljaweal1#
目前尚不支持以编程方式关闭Chrome自定义选项卡。但如果需要,您可以通过从启动Chrome自定义选项卡的位置启动上一个Activity来关闭它。让,您从“MainActivity”打开Chrome自定义标签页,在Chrome自定义标签页中有一个选项菜单项“关闭”,在“关闭”菜单项中单击您想要关闭Chrome自定义标签页并返回“MainActivity",然后您可以通过启动“MainActivity"来完成。为此,将Activity launchMode设置为**singleTask,然后单击按钮时以FLAG_ACTIVITY_CLEAR_TOP**启动Activity。检查我的演示代码的细节,希望它会帮助有人谁想要这样的东西。
singleTask
FLAG_ACTIVITY_CLEAR_TOP
AndroidManifest.xml:
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".CustomTabReceiver" android:enabled="true" />
字符串
MainActivity.java:
public class MainActivity extends Activity { public static String CHROME_PACKAGE_NAME = "com.android.chrome"; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; } public void onClick(final View view) { switch (view.getId()) { case R.id.btnOpenChromeCustomTab: launchChromeCustomTab(); break; default: return; } } private void launchChromeCustomTab() { Uri uri = Uri.parse("http://www.google.com/"); Intent intent = new Intent(mContext, CustomTabReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); CustomTabsIntent.Builder customTabsBuilder = new CustomTabsIntent.Builder(); customTabsBuilder.addMenuItem("Close", pendingIntent); CustomTabsIntent customTabsIntent = customTabsBuilder.build(); customTabsIntent.intent.setPackage(CHROME_PACKAGE_NAME); customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); customTabsIntent.launchUrl(mContext, uri); } }
型
CustomTabReceiver.java:
public class CustomTabReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, MainActivity.class); myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(myIntent); } }
activity_main.xml:
<Button android:id="@+id/btnOpenChromeCustomTab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:onClick="onClick" android:text="Open Chrome Custom Tab" />
注:
在测试此代码之前,请通过显式检查确保已在设备上安装了更新的Chrome。因为在此演示代码中,Chrome自定义选项卡已通过将硬编码包设置为com.android.chrome打开,并且应用程序可能会在未安装Chrome的系统上中断。因此,请遵循最佳实践来启动Chrome自定义选项卡。
Chrome
com.android.chrome
j91ykkif2#
不可以。关闭自定义选项卡视图需要用户同意。
xzabzqsa3#
android:noHistory=“true”在activity中的manifest.xml中使用这一行,它可以完美地工作
68bkxrlz4#
您可以使用自定义URI方案链接回您的应用。只需确保使用Intent过滤器注册您的方案(请参阅深层链接)。然后您就可以开始Activity:
private void closeBrowserTab(Context context, String customUri) { Uri uri = Uri.parse(customUri); Intent appIntent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(appIntent); }
6qqygrtg5#
在首选项或数据存储中保存值并重新启动Activity,然后检查保存的值并打开任何内容或执行某些操作重新启动Activity的代码:
fun restart() { val intent = Intent(this, MainActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) startActivity(intent) Runtime.getRuntime().exit(0) }
5条答案
按热度按时间6ljaweal1#
目前尚不支持以编程方式关闭Chrome自定义选项卡。但如果需要,您可以通过从启动Chrome自定义选项卡的位置启动上一个Activity来关闭它。
让,您从“MainActivity”打开Chrome自定义标签页,在Chrome自定义标签页中有一个选项菜单项“关闭”,在“关闭”菜单项中单击您想要关闭Chrome自定义标签页并返回“MainActivity",然后您可以通过启动“MainActivity"来完成。为此,将Activity launchMode设置为**
singleTask
,然后单击按钮时以FLAG_ACTIVITY_CLEAR_TOP
**启动Activity。检查我的演示代码的细节,希望它会帮助有人谁想要这样的东西。
AndroidManifest.xml:
字符串
MainActivity.java:
型
CustomTabReceiver.java:
型
activity_main.xml:
型
注:
在测试此代码之前,请通过显式检查确保已在设备上安装了更新的
Chrome
。因为在此演示代码中,Chrome自定义选项卡已通过将硬编码包设置为com.android.chrome
打开,并且应用程序可能会在未安装Chrome
的系统上中断。因此,请遵循最佳实践来启动Chrome自定义选项卡。
j91ykkif2#
不可以。关闭自定义选项卡视图需要用户同意。
xzabzqsa3#
android:noHistory=“true”在activity中的manifest.xml中使用这一行,它可以完美地工作
68bkxrlz4#
您可以使用自定义URI方案链接回您的应用。只需确保使用Intent过滤器注册您的方案(请参阅深层链接)。然后您就可以开始Activity:
字符串
6qqygrtg5#
在首选项或数据存储中保存值并重新启动Activity,然后检查保存的值并打开任何内容或执行某些操作
重新启动Activity的代码:
字符串