我正在使用一个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);
}
}
请告诉我,我做错了什么?谢谢您。
通过使用 launchMode="singleTask"
而根据Android文档(见 https:/developer.android.comguidecomponentsactivitiestasks-and-back-stack。):
系统创建一个新任务,并在新任务的根部实例化该活动。但是,如果该活动的实例已经存在于一个单独的任务中,系统会通过调用它的 onNewIntent() 方法将意图路由到现有实例,而不是创建一个新的实例。活动的实例一次只能存在一个。
在您的主活动中添加一个 onNewIntent
处理程序,在这里你应该看到新的URL被传递到了 新意向:
@Override
protected void onNewIntent(Intent newIntent)
{
// reload WebView
}
此外,我不确定使用 onResume
到 mywebView.loadUrl()
是一个好的或必要的做法,因为即使是简单的暂停useresume事件也会导致页面被重新加载。 我建议在 onCreate()
,并将其重新装入 onNewIntent()
.