开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 934|回复: 0
收起左侧

[技术分享] uni-app在不同平台下拨打电话的示例

[复制链接]
结帖率:100% (4/4)
发表于 2021-10-15 16:28:05 | 显示全部楼层 |阅读模式   河北省石家庄市
本帖最后由 xiaoxiaoxxx 于 2021-10-15 16:28 编辑


场景
在App中拨打电话是一个比较常见的应用场景,但是我们通过搜索文章,发现,大部分的博文都是uni-app官网的copy, copy

uni-app 提供的打电话,只是帮你把拨号界面呼出来,并不能直接拨打, 安卓原生API可以,IOS因为权限问题,不行

那么,我们可以做个判断,如果是安卓,点击了 直接就把电话拨出来,其他的平台,使用uni-app默认的唤起拨号界面

实现机制
HTML5+ 提供的接口 plus.device.dial 这个SDK的使用,是需要引入包的
uni-app 对外提供的接口 uni.makePhoneCall
IOS和 Andriod 提供原生的接口- 不熟悉原生开发,会有困难
在移动端浏览器 H5页面
[JavaScript] 纯文本查看 复制代码
<a href="tel: 10086">10086</a>

废话不多说,直接上代码说明 下面是通过 条件编译+ 各平台代码接口实现
testDevice.vue
[JavaScript] 纯文本查看 复制代码
<view>   
        <!-- #ifdef APP-PLUS -->   <button @tap="telphone">拨打电话</button>   
        <!-- #endif -->     
        <!-- #ifdef H5 -->   <a href="tel:10086">10086-h5平台下</a>   
        <!-- #endif -->
</view>   <script>
        // 对不同的平台有一点区分    import telphone from './telphone.js'    export default {      methods: {        telphone() {          // 通过传递电话参数,调用不同平台拨打电话的功能          telphone("10086")        }      }    }  
</script>

我们这里 不关注界面问题,避免分散各位看官老爷的关注点,重点看js中的实现
请注意,一定使用 条件编译,可以支持不同的场景, 上面的是 App端(IOS和Andriod), 下面是普通的h5
telphone.js
[JavaScript] 纯文本查看 复制代码
//#ifdef H5

import VConsole from 'vconsole'

 

new VConsole()

//#endif

 

export default (phone) => {

    // 获取设备平台

    let platform = uni.getSystemInfoSync().platform

  

    //#ifdef H5

    // h5环境--浏览器

    let ua = navigator.userAgent.toLowerCase()

    // 就要判断 是VX内置浏览器还是用户的普通浏览器

 

    if (ua.match(/MicroMessenger/i) == "micromessenger") {

        // VX浏览器

        console.log('VX浏览器')

    } else {

        // 普通浏览器 

    }

    //#endif

 

    //#ifdef APP-PLUS

    // app环境

    switch (platform) {

        case 'android':

            // 导入Activity、Intent类

            var Intent = plus.android.importClass("android.content.Intent");

            var Uri = plus.android.importClass("android.net.Uri");

            // 获取主Activity对象的实例  

            var main = plus.android.runtimeMainActivity();

            // 创建Intent  

            var uri = Uri.parse("tel:" + phone); // 这里可修改电话号码  

            var call = new Intent("android.intent.action.CALL", uri);

            // 调用startActivity方法拨打电话  

            main.startActivity(call);

            break;

        case 'ios':

            // 使用uni-app提供的借口

            uni.makePhoneCall({

                phoneNumber: phone

            })

            break;

        default:

            // 调试器工具

    }

    //#endif

}

注意事项
条件编译, 我们在使用 VConsole 的时候,如果不使用条件编译,在App端是会报错的
一定不能将import语句 写在if判断或者 三目运算中, 会报错, 要理解ES6模块加载的机制
通过uni-app提供的接口,判断是App平台(IOS或者Andriod) ,怎么区分普通浏览器和VX浏览器还是依赖条件编译
上述的无论是uni-app提供的API实现还是,Andriod的 SDK 都是跳出 App拨打电话,挂断以后,还是会调回App界面
plus.device.dial 需要引入对应的SDK, 这个其实有是要通过 条件编译,判断当前所处的环境,上面的已经够用,其实和引入 vconsole 是一样的道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表