uni-app uni.makePhoneCall API在安卓平台上除标准基座外无法正常调用

uni-app uni.makePhoneCall API在安卓平台上除标准基座外无法正常调用

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 Android
手机系统版本号 Android 14
手机厂商 魅族
手机机型 魅族 21
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 点击方法执行uni.makePhoneCall

预期结果:

  • 弹出框跳转到拨号界面

实际结果:

  • 没有弹出框跳转到拨号界面

bug描述:

运行到标准基座包就可以,运行到自定义基座包和打的正式包里面,uni.makePhoneCall执行到success了,但是不弹出框跳转到拨号界面


更多关于uni-app uni.makePhoneCall API在安卓平台上除标准基座外无法正常调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

用hello uni-app示例标准基座和自定义基座测试均正常,你试下正常吗?

更多关于uni-app uni.makePhoneCall API在安卓平台上除标准基座外无法正常调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我这边也遇到了,使用Hbuilderx运行能跳到拨打电话的页面,打包出来使用小程序的方式运行,不能拨打电话,调用makePhoneCall 无反应 ;使用新增版本4.29

我这边也遇到了,使用Hbuilderx运行能跳到拨打电话的页面,打包出来使用小程序的方式运行,不能拨打电话,调用makePhoneCall 无反应

在处理 uni-appuni.makePhoneCall API 在安卓平台上除标准基座外无法正常调用的问题时,首先需要确保你的代码调用方式是正确的。uni.makePhoneCall 用于拨打电话,其基本用法如下:

uni.makePhoneCall({
    phoneNumber: '1234567890', // 需要拨打的电话号码
    success: function () {
        console.log('拨打电话成功!');
    },
    fail: function (error) {
        console.error('拨打电话失败:', error);
    }
});

若该代码在安卓平台的标准基座中可以正常工作,但在其他环境(如自定义基座或发布后的应用)中出现问题,可能的原因及解决方案通常涉及以下几个方面:

  1. 权限配置: 确保在 manifest.json 中已正确配置了拨打电话的权限。对于 Android,需要添加以下权限:

    "mp-weixin": {},
    "app-plus": {
        "distribute": {
            "android": {
                "permissions": [
                    "android.permission.CALL_PHONE"
                ]
            }
        }
    }
    

    注意:在 Android 6.0 及以上版本中,除了静态声明权限,还需要在运行时请求权限。你可以使用 plus.android.requestPermissions 方法来请求权限。

  2. 检查电话号码格式: 确保传入的电话号码格式正确,通常应为纯数字字符串,且不带任何特殊字符或空格。

  3. 错误处理: 增强错误处理逻辑,以便更好地理解失败原因。例如,检查是否有安全软件或系统设置阻止了拨打电话的功能。

  4. 自定义基座配置: 如果使用的是自定义基座,确保基座配置正确,并且已包含了所有必要的权限和依赖。

  5. 调试日志: 在失败回调中打印更详细的错误信息,或者使用 Android Studio 等工具查看应用的日志输出,以获取更具体的错误信息。

以下是一个增强版的代码示例,包括了运行时权限请求(针对 Android 6.0 及以上):

function makePhoneCall(phoneNumber) {
    if (uni.getSystemInfoSync().platform === 'android') {
        const main = plus.android.runtimeMainActivity();
        const context = main.getApplicationContext();
        const pm = context.getPackageManager();
        const hasPermission = pm.checkPermission("android.permission.CALL_PHONE", main.getPackageName()) === 0;
        
        if (!hasPermission) {
            plus.android.requestPermissions(['android.permission.CALL_PHONE'], function(event) {
                if (event.deniedAlways.length === 0 && event.granted.length > 0) {
                    uni.makePhoneCall({
                        phoneNumber: phoneNumber,
                        success: function() {
                            console.log('拨打电话成功!');
                        },
                        fail: function(error) {
                            console.error('拨打电话失败:', error);
                        }
                    });
                } else {
                    console.error('权限请求被拒绝');
                }
            });
        } else {
            uni.makePhoneCall({
                phoneNumber: phoneNumber,
                success: function() {
                    console.log('拨打电话成功!');
                },
                fail: function(error) {
                    console.error('拨打电话失败:', error);
                }
            });
        }
    } else {
        uni.makePhoneCall({
            phoneNumber: phoneNumber,
            success: function() {
                console.log('拨打电话成功!');
            },
            fail: function(error) {
                console.error('拨打电话失败:', error);
            }
        });
    }
}

调用 makePhoneCall('1234567890') 即可尝试拨打电话。

回到顶部