前提:需要在指定的页面的清单文件中进行配置
<intent-filter>
<data
<!--scheme 是可以随便指定的,只是入口处调用这个就行-->
android:scheme="test"
/>
<!--这个是必须要写-->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
1.外部网页入口,当前app并没有启动情况下:
启动流程:网页-->指定页;
点击返回:指定页-->网页
因为当前app的Activity栈中只有一个实例,所有点击返回就会退出
2.外部网页入口,当前app并没有启动情况下,但是在指定页点击返回时,要求回到首页或者引导页(根据需求):
<activity
android:name=".Test2Activity" <!--指定页Activity>
android:parentActivityName=".MainActivity" <!--指定页Activity父层次的Activity>
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<!--meta-data中指定下>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"
/>
<intent-filter>
<data android:scheme="test"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
try {
if (data != null) {
Log.i(TAG, "url: " + data.toString())
val resultIntent = Intent(this,Test1Activity.class)
if (resultIntent == null) {
finish()
return
}
resultIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
//判断当前是否已经启动过app,直接开启指定界面
if (ViewUtils.isLaunchedActivity(this, MainActivity::class.java)) {
startActivity(resultIntent)
} else {
//没有启动过
val stackBuilder = TaskStackBuilder.create(this)
.addParentStack(resultIntent.component) //把父层次的Activity首先添加入栈
.addNextIntent(resultIntent) //在吧当前的指定页的Activity入栈,并且在栈顶
stackBuilder.startActivities() //开启俩个Activity,有顺序的
}
finish()
}
} catch (e: Exception) {
e.printStackTrace()
finish()
}
推荐一个非常棒的博客:https://www.jianshu.com/p/1439c8bbc34b