uniapp应用间实现通信,通过自定义广播实现
一、uniapp检测应用安装,并实现跳转至其他app
if (
plus.runtime.isApplicationExist({
pname: 'com.android.browser'
})
) {
plus.runtime.launchApplication({
pname: "com.android.browser",
action: "com.android.browser.BrowserActivity",
}, (e) => {
console.log("e", e)
})
} else {
uni.showModal({
title: '提示',
content: '您还没有此APP,去下载',
success: function(res) {
if (res.confirm) {
plus.runtime.openURL('https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.mm', function(res) {
console.log(res);
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
注意: 实现跳转的过程中,携带参数的方式如下
let senddata = {"uid":136523,"username":"dy13","nickname":"缎玉13","mobile":"","email":"dy@vidycoin.cloud","avatar":null}
plus.runtime.launchApplication({
pname: "io.dcloud.HBuilder",
action: "io.dcloud.PandoraEntry",
extra: senddata
},
(e)=> {
uni.showToast({
title: "打开失败",
icon: "none"
})
},
);
二、自定义广播
1、发送广播
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("comxxx.xxx.appxxx");
var keyValue = "要传递的值";
main = plus.android.runtimeMainActivity();
intent.putExtra("data", keyValue);
main.sendBroadcast(intent);
2、接收广播
main = plus.android.runtimeMainActivity();
console.log('========main===', main)
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
plus.android.importClass(intent);
var action = intent.getAction()
let code = intent.getStringExtra("data")
console.log('--------context====', context)
console.log('--------intent====', intent)
console.log('--------action====', action)
console.log('--------code====', code)
if (action == 'com.android.browser') {
console.log('监听扫码触发....')
var data = intent.getExtra("data");
if (data) {
console.log('zhanglp', data.replace(/\n/, ''))
console.log('zhanglp', data.replace(/\n/, '').replace(/\t/, ''))
success({
type: 'barcode',
data: data.replace(/\n/, '').replace(/\t/, '').trim()
})
} else {
fail('未识别到扫码数据')
}
}
}
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
filter.addAction("comxxx.xxx.appxxx");
main.registerReceiver(receiver, filter);
注意:发送和接收中用到的变量main 和 receiver为全局变量,此处省略了定义
3、自定义广播示例
定义main 和receiver变量

wakeOtherApp() {
const isApp = plus.runtime.isApplicationExist({
pname: 'qd.app'
})
if (isApp) {
uni.showToast({
title: '应用已安装',
icon: 'success',
duration: 3000
})
} else {
uni.showToast({
title: '应用未安装',
icon: 'error',
duration: 3000
})
}
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("qd.app");
var keyValue = "要传递的值";
intent.putExtra("data", keyValue);
main.sendBroadcast(intent);
},
recive(success, fail) {
main = plus.android.runtimeMainActivity();
console.log('========main===', main)
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
plus.android.importClass(intent);
var action = intent.getAction()
let code = intent.getStringExtra("data")
console.log('--------context====', context)
console.log('--------intent====', intent)
console.log('--------action====', action)
console.log('--------code====', code)
if (action == 'com.android.browser') {
console.log('监听扫码触发....')
var data = intent.getExtra("data");
if (data) {
console.log('zhanglp', data.replace(/\n/, ''))
console.log('zhanglp', data.replace(/\n/, '').replace(/\t/, ''))
success({
type: 'barcode',
data: data.replace(/\n/, '').replace(/\t/, '').trim()
})
} else {
fail('未识别到扫码数据')
}
}
}
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var filter = new IntentFilter();
filter.addAction("qd.app");
main.registerReceiver(receiver, filter);
}
接收广播

点击按钮发送广播

控制台输出

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?