Html5 调起 Android App(Scheme,AppLinks)

Android 调起APP分为俩种方式,一种为Scheme(弊端较多),一种为AppLinks方式(有一定局限性),或者使用第三方提供的集成方式。例如:MobTech 官网链接

Scheme方式

以下Scheme方式在任何浏览器都能使用,但是是通过设置延时实现,所以会导致 如果点击Link弹出打开App浮窗 未点击打开App一段时间后会继续跳转到Store。

<!doctype html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no;" name="viewport"/>
    <script>
        // 检查是否安装app
        function openApp(e) {
            var u = window.navigator.userAgent;
            var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
            var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
            if (isAndroid) {
                android();
            }
            if (isiOS) {
                ios();
            }
        }
        function android() {
            var _clickTime = new Date().getTime();
            window.location.href = 'humanage://com.humanage/openwith?name=zhangsan&age=26';
            /***打开app的协议,有安卓同事提供***/
            //启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
            var _count = 0, intHandle;
            intHandle = setInterval(function () {
                _count++;
                var elsTime = new Date().getTime() - _clickTime;
                if (_count >= 100 || elsTime > 3000) {
                    clearInterval(intHandle);
                    //检查app是否打开
                    if (document.hidden || document.webkitHidden) {
                        // 打开了
                        window.close();
                    } else {
                        // 没打开
                        alert('Place download App')
                        window.location.href = "";//下载链接
                    }
                }
            }, 20);

        }

        function ios() {
            var _clickTime = +(new Date());
            var ifr = document.createElement("iframe");
            ifr.src = "humanage://com.humanage/openwith?name=zhangsan&age=26";
            /***打开app的协议,有ios同事提供***/
            ifr.style.display = "none";
            document.body.appendChild(ifr);
            //启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
            var _count = 0, intHandle;
            intHandle = setInterval(function () {
                _count++;
                var elsTime = +(new Date()) - _clickTime;
                console.log(_count, elsTime, +(new Date()), _clickTime)
                if (_count >= 100 || elsTime > 3000) {
                    clearInterval(intHandle);
                    document.body.removeChild(ifr);
                    //检查app是否打开
                    if (document.hidden || document.webkitHidden) {
                        // 打开了
                        window.close();
                    } else {
                        alert('Place download App')
                        window.location.href = "https://itunes.apple.com/cn/app/id477927812";//下载链接
                    }
                }
            }, 20);
        }

        var objbtn = document.getElementById('btn');
        objbtn.onclick = function () {
            openApp()
        }

    </script>
</head>

<body>

<div class="btn_line">
    <input type="submit" class="bottom_btn" onclick="android()" value="Start agora">
</div>

</body>
</html> 

Andorid:AndroidManifest.xml中添加以下代码

<activity android:name=".ui.agora.LiveCheckActivity">
            <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="humanage" android:host="com.humanage" android:pathPrefix="/openwith"/>
            </intent-filter>
</activity>

AppLinks方式

这种方式解决了Scheme的弊端,但是只适用于谷歌浏览器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android app 使用scheme可以让其他应用程序或者网页链接打开你的应用程序,并且可以携带参数,实现应用程序之间的跳转和交互。以下是Android app 使用scheme的步骤: 1. 在AndroidManifest.xml文件中注册scheme。例如,你可以在<activity>标签中添加一个<intent-filter>标签,并且在<intent-filter>标签中添加一个<data>标签,如下所示: ```xml <activity android:name=".MainActivity"> <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="myapp" android:host="openactivity" /> </intent-filter> </activity> ``` 2. 在应用程序中处理scheme。在你的MainActivity中,你可以通过以下代码来处理scheme: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData(); if (data != null) { String host = data.getHost(); if (host.equals("openactivity")) { //处理scheme参数,打开指定的Activity } } } ``` 3. 在其他应用程序或者网页中使用scheme来打开你的应用程序。例如,你可以在浏览器中输入“myapp://openactivity”来打开你的应用程序并且跳转到指定的Activity。 注意事项: 1. 必须在<intent-filter>标签中添加<category android:name="android.intent.category.BROWSABLE" />,否则无法在浏览器中打开应用程序。 2. scheme参数区分大小写。 3. 如果你的应用程序中有多个Activity需要处理scheme,需要在<intent-filter>标签中分别添加<data>标签,每个<data>标签的scheme和host必须不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值