Cannot understand how to open a simple TWA inside an app (using AndroidX)

拟墨画扇 提交于 2019-12-18 09:52:12

问题


I am trying to open a TWA inside my app and have researched for 2 days.

I've already managed to create a single TWA app, no fuss, just edit the manifest and a few things more.

Now I need to have my own app - let's say the app has a splash screen activity at first which then opens the TWA inside the app. Can I launch a TWA inside my app through a simple splash screen activity, for example?

I did try to use CustomTabs way, but it says it is deprecated and to use TrustedWebActivityIntentBuilder instead, but there is 0, I repeat, ZERO documentation on how to use that!

Android development documentation is horrible. Among other things, the documentation pointers are out-dated. (Read videos on their channel linking to guides that are no longer valid for what is discussed in the video itself)

The closest thing I found was this sample project. This uses a shocking number of deprecated things rendering the adaptation of that method into my app completely useless. It also makes use of a countless number of custom Classes/Helpers created just for that project, leading me to a never ending marathon of copy-pasting each one of them just to find out that inside that one there are more that need to be copied over to the project.


回答1:


To my opinion there is a simpler approach.

First: declare your TWA activity in AndroidManifest.xml like shown below. Note that it won't start by default because it doesn't handle the android.intent.action.MAIN intent, so you can implement your own main activity.

    <activity
        android:name="com.google.androidbrowserhelper.trusted.LauncherActivity">

        <!-- Edit android:value to change the url opened by the TWA -->
        <meta-data
            android:name="android.support.customtabs.trusted.DEFAULT_URL"
            android:value="https://YOUR_SITE_URL" />

        <!--
          This intent-filter allows the TWA to handle Intents to open
          YOUR_SITE_URL
        -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE"/>

            <!-- Edit android:host to handle links to the target URL-->
            <data
                android:scheme="https"
                android:host="YOUR_SITE_URL"/>
        </intent-filter>
    </activity>

Second: somewhere in your code start the TWA activity with the intent like this. You can also pass site url in the intent if you wish.

Intent intent = new Intent(this, com.google.androidbrowserhelper.trusted.LauncherActivity.class);
intent.setData(Uri.parse("ANOTHER_SITE_URL"));
startActivity(intent);

Also note the dependencies required to use TWA with AndroidX:

implementation 'androidx.browser:browser:1.0.0'
implementation 'com.github.GoogleChrome:android-browser-helper:ff8dfc4ed3d4133aacc837673c88d090d3628ec8'



回答2:


After a lot of trial and error as always I've managed to launch a TWA inside the app. Note that this is not like a WebView, it merely starts an activity on your app's stack.

The following is in my Activity's code:

final static String PACKAGE_NAME = "com.android.chrome";
final static String BASE_URL = "https://your.website.com";
CustomTabsClient mClient;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_launcher);

    CustomTabsClient.bindCustomTabsService(this, PACKAGE_NAME, getConnection(BASE_URL));

}

private CustomTabsServiceConnection getConnection(final String url) {

    return new CustomTabsServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            mClient = null;
        }

        @Override
        public void onCustomTabsServiceConnected(
            ComponentName name,
            CustomTabsClient client
        ) {

            final Intent intent;
            final CustomTabsSession customTabsSession;
            final TrustedWebActivityIntentBuilder intentBuilder;

            mClient = client;
            mClient.warmup(0);

            if ((customTabsSession = mClient.newSession(new CustomTabsCallback())) == null) {
                return;
            }

            intentBuilder = new TrustedWebActivityIntentBuilder(Uri.parse(url))
                .setToolbarColor(Color.parseColor("#ffffff"))
                .setNavigationBarColor(Color.parseColor("#ffffff"));

            intent = intentBuilder.build(customTabsSession);

            startActivity(intent);

        }

    };

}


来源:https://stackoverflow.com/questions/57741990/cannot-understand-how-to-open-a-simple-twa-inside-an-app-using-androidx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!