关于通过scheme 跳转当前app的指定页面的一些问题

 

前提:需要在指定的页面的清单文件中进行配置

<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

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值