uni-app贡献native.js(NJS)一些代码,将持续更新

发布于 1周前 作者 vueper 来自 Uni-App

uni-app贡献native.js(NJS)一些代码,将持续更新

播放自定义提示音(需离线打包,添加自己的声音资源)

搞这个是因为官方没提供播放系统声音的方法,而使用plus.ios.invoke又没效果,比如plus.ios.invoke(null, 'AudioServicesPlaySystemSound', 1103);压根不起作用,官方的plus.audio.createPlayer感觉又有点麻烦,也不知道能否播放自己添加的声音资源,还需要添加liblibMedia.alibopencore-amrnb.alibmp3lame.a这几个库文件,增加包尺寸。

使用方法:

iosPlaySystemSound('my.wav');
window.iosPlaySystemSound = function(filename) {
    if (!window.plus) {
        return false;
    }

    iosImport('NSBundle');
    iosImport('AVAudioPlayer');

    var bundle = NSBundle.mainBundle();
    var soundUrl = bundle.URLForResourcewithExtension(filename, null);

    var player = new AVAudioPlayer();
    player.initWithContentsOfURLerror(soundUrl, null);
    if (!player) {
        console.log('failed to play: ' + filename);
        return false;
    }
    player.setNumberOfLoops(0); //-1:无限循环
    player.setVolume(1);
    player.prepareToPlay();
    player.play();
}

短震,震动反馈

window.shortVibrate = function() {
    if (!window.plus) {
        return false;
    }

    if (plus.os.name == 'iOS') {
        iosImport('UIImpactFeedbackGenerator');
        var impact = new UIImpactFeedbackGenerator();
        impact.prepare();
        impact.init(1);
        impact.impactOccurred();
    } else {
        window.plus.device.vibrate(10);
    }
}

1 回复

当然,很高兴能为uni-app的native.js(NJS)贡献一些代码示例。以下是一些常见的场景及其对应的代码案例,这些代码示例将展示如何在uni-app中使用NJS来实现特定的原生功能。

1. 获取设备信息

// native.js (NJS)
module.exports = {
    getDeviceInfo: function(callback) {
        plus.device.getInfo(function(info) {
            callback && callback(info);
        });
    }
};

// 在uni-app中使用
const njs = require('@/common/native.js'); // 假设native.js放在common目录下

njs.getDeviceInfo(function(info) {
    console.log('Device Info:', info);
});

2. 调用原生相机拍照

// native.js (NJS)
module.exports = {
    captureImage: function(callback) {
        const cmr = plus.camera.createCamera('front');
        cmr.captureImage(function(e) {
            const tempFilePath = e.target.result;
            callback && callback(tempFilePath);
        }, function(e) {
            console.error('Capture failed:', e);
        }, {
            quality: 'high',
            targetWidth: 800,
            targetHeight: 800
        });
    }
};

// 在uni-app中使用
njs.captureImage(function(imagePath) {
    console.log('Captured Image Path:', imagePath);
    // 可以进一步处理图片,比如上传到服务器
});

3. 调用原生支付功能

// native.js (NJS)
module.exports = {
    pay: function(orderInfo, callback) {
        const payment = plus.payment.create('alipay'); // 以支付宝为例
        payment.setOrderInfo(orderInfo);
        payment.execute(function(result) {
            callback && callback(result);
        }, function(error) {
            console.error('Payment failed:', error);
        });
    }
};

// 在uni-app中使用
const orderInfo = {
    // 支付宝支付所需的订单信息
    'out_trade_no': '202304010001',
    'total_amount': '0.01',
    // 更多字段...
};

njs.pay(orderInfo, function(result) {
    console.log('Payment Result:', result);
});

这些代码示例展示了如何在uni-app中通过NJS调用原生功能,包括获取设备信息、拍照以及支付。你可以根据实际需求对这些代码进行修改和扩展。持续更新这些代码库时,可以逐步增加更多原生功能的封装,如访问文件系统、定位服务、蓝牙通信等,以满足不同应用的需求。

回到顶部