Andoriod 浏览器打开app

最近项目一个新需求: 从浏览器打开本地app,并打开指定商品详情界面

记录一下实现过程

前提:和前端约定好scheme 约束:前端代码:

<a href="browserToClient//?id=62fb9330120d4055a546af29abbf0e3d">测试android</a>
 <br>
此链接遵循uri协议


1.在清单文件中给splash  Activity(app的第一个界面)添加一个 intent-filter(代码中的第二个):

添加筛选配置如下

<activity
    android:name=".activity.WelcomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.Start">
    <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:scheme="browserToClient" />
    </intent-filter>
</activity>
2.在splash  Activity的oncreate方法中做一些判断

用来区分本次打开是正常点击app启动,还是从外部浏览器启动,还要判断应用栈内的activity数量(用于判断关闭商品详情界面后的跳转),

Intent intent = getIntent();
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            //外部连接打开app
            boolean b = AppManager.getInstance().getmActivityStack().size() > 1;
            Log.e(TAG, "onCreate:栈内activity: "+AppManager.getInstance().getmActivityStack().size());
            if(b){//应用在此前已经打开
                Intent intent1 = new Intent();
                intent1.setClass(this, DetailsGoodsNewWebActivity.class);//目标activity
                Uri data = intent.getData();
                String id = data.getQueryParameter("id");
                intent1.putExtra("goodsId",id);
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent1);
                finish();
            }else{
                //应用在此前没有打开
                Intent intent1 = new Intent();
                intent1.setClass(this, HomeActivity.class);//应用的主页
                Uri data = intent.getData();
                String id = data.getQueryParameter("id");
                intent1.putExtra("goodsId",id);
//                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent1);
                finish();
            }
        }else{
            //内部,或手机图标启动
            initApp();// 初始化APP
            startApp();
        }
3.在主页activity中oncreate中做判断

if(goodsId!=null){
    Intent intent1 = new Intent();
    intent1.setClass(this, DetailsGoodsNewWebActivity.class);//目标activity

    intent1.putExtra("goodsId",goodsId);
    startActivity(intent1);
}

注:前端代码只是用来测试,前端还需要判断用户是否安装了本应用,核心方法(判断scheme在1.2秒内是否有匹配):

$('a').click(function() {
    location.href = '自定义 URL scheme';
    t = Date.now();


    setTimeout(function(){
        if (Date.now() - t < 1200) {
            location.href = 'Android 下载地址';
        }
    }, 1000);


    return false;
    }
}

完成!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值