在Android webview中打开链接,创建多个实例。

问题描述 投票:0回答:1

我正在使用一个Android webview应用程序,并在其中打开www.xyz.com。当应用程序在后台运行时,如果我试图打开WhatsappSMS收到的消息-www.xyz.comexample,那么它是在一个新的实例中打开的,而不是在已经运行的实例中打开的,它是在后台。当我尝试使用android:launchMode="singleTask "时,它只恢复www.xyz.com,而不是打开www.xyz.comexample。

下面是我的AndroidManifest.xml。

<activity android:name=".MainActivity" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

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

                <data
                    android:host="www.xyz.com"
                    android:scheme="https"
                    />
            </intent-filter>
        </activity>

下面是MainActivity.java的代码--------。

protected void onResume() {
        super.onResume();
Uri data = getIntent().getData();
        if (data != null && data.isHierarchical()) {
            String uri = this.getIntent().getDataString();
            myWebView.loadUrl(uri);
            Log.i("MyApp", "Deep link clicked " + uri);
        }
}

请告诉我,我做错了什么?谢谢您。

android android-studio webview deep-linking
1个回答
0
投票

通过使用 launchMode="singleTask" 而根据Android文档(见 https:/developer.android.comguidecomponentsactivitiestasks-and-back-stack。):

系统创建一个新任务,并在新任务的根部实例化该活动。但是,如果该活动的实例已经存在于一个单独的任务中,系统会通过调用它的 onNewIntent() 方法将意图路由到现有实例,而不是创建一个新的实例。活动的实例一次只能存在一个。

在您的主活动中添加一个 onNewIntent 处理程序,在这里你应该看到新的URL被传递到了 新意向:

@Override
protected void onNewIntent(Intent newIntent)
{
     // reload WebView
}

此外,我不确定使用 onResumemywebView.loadUrl() 是一个好的或必要的做法,因为即使是简单的暂停useresume事件也会导致页面被重新加载。 我建议在 onCreate(),并将其重新装入 onNewIntent().

© www.soinside.com 2019 - 2024. All rights reserved.