android 如何关闭Chrome自定义标签页

bzzcjhmw  于 2023-11-15  发布在  Android
关注(0)|答案(5)|浏览(281)

在我的应用程序中,我已经通过Chrome自定义选项卡打开了一个网址。我们知道,当用户点击设备返回按钮或自定义返回按钮时,Chrome自定义选项卡将被关闭。是否可以在没有用户干预的情况下自动关闭Chrome自定义选项卡。

6ljaweal

6ljaweal1#

目前尚不支持以编程方式关闭Chrome自定义选项卡。但如果需要,您可以通过从启动Chrome自定义选项卡的位置启动上一个Activity来关闭它。
让,您从“MainActivity”打开Chrome自定义标签页,在Chrome自定义标签页中有一个选项菜单项“关闭”,在“关闭”菜单项中单击您想要关闭Chrome自定义标签页并返回“MainActivity",然后您可以通过启动“MainActivity"来完成。为此,将Activity launchMode设置为**singleTask,然后单击按钮时以FLAG_ACTIVITY_CLEAR_TOP**启动Activity。
检查我的演示代码的细节,希望它会帮助有人谁想要这样的东西。

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自定义选项卡。

j91ykkif

j91ykkif2#

不可以。关闭自定义选项卡视图需要用户同意。

xzabzqsa

xzabzqsa3#

android:noHistory=“true”在activity中的manifest.xml中使用这一行,它可以完美地工作

68bkxrlz

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);
}

字符串

6qqygrtg

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)
}

字符串

相关问题