代码如下,主要代码来自于uniapp问答社区,感兴趣的可以去看看,这里仅做记录
自定义一个子组件
<script>
export default {
data() {
return {
body: ''
}
},
mounted() {
this.requestLocation()
},
methods: {
monitor() {
var unithis = this;
var callbacks = [];
var receiver;
var filter;
var main;
var isInit = false;
var isRegistered = false;
var isOlderVersion = false;
var init = function(callback) {
//仅支持Android版本
if (plus.os.name !== 'Android') {
return;
}
try {
var version = plus.runtime.innerVersion.split('.');
isOlderVersion = parseInt(version[version.length - 1]) < 22298;
main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var SmsMessage = plus.android.importClass('android.telephony.SmsMessage');
var receiverClass = 'io.dcloud.feature.internal.reflect.BroadcastReceiver';
if (isOlderVersion) {
receiverClass = 'io.dcloud.feature.internal.a.a';
}
filter = new IntentFilter();
var onReceiveCallback = function(context, intent) {
try {
var action = intent.getAction();
if (action == "android.provider.Telephony.SMS_RECEIVED") {
var pdus = intent.getSerializableExtra("pdus");
var msgs = [];
for (var i = 0, len = pdus.length; i < len; i++) {
msgs.push(SmsMessage.createFromPdu(pdus[i]));
}
for (var i = 0, len = callbacks.length; i < len; i++) {
callbacks[i](msgs);
}
}
} catch (e) {}
}
receiver = plus.android.implements(receiverClass, {
a: onReceiveCallback,
onReceive: onReceiveCallback
});
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
callback && callback();
} catch (e) {}
}
//注册短信监听
var register = function(callback) {
callbacks.push(callback);
if (!isInit) {
isInit = isRegistered = true;
init(function() {
setTimeout(function() {
console.log('registerReceiver');
try {
if (isOlderVersion) {
console.log('old Version')
main.a(receiver, filter);
} else {
console.log('new Version')
main.registerReceiver(receiver, filter); //注册监听
}
} catch (e) {
console.log('注册监听' + e)
}
}, 300);
});
} else if (!isRegistered) {
// console.log('registerReceiver');
try {
if (isOlderVersion) {
main.a(receiver, filter);
} else {
main.registerReceiver(receiver, filter); //注册监听
}
} catch (e) {
console.log('注册失败监听' + e)
}
}
};
//注销监听,在登录成功或从登录页跳转到其它页面后调用
var unregister = function(callback, remove) {
for (var i = 0, len = callbacks.length; i < len; i++) {
if (callbacks[i] === callback) {
callbacks.splice(i, 1);
}
}
if (remove && !callbacks.length) {
if (main && isRegistered) {
try {
if (isOlderVersion) {
main.a(receiver);
} else {
main.unregisterReceiver(receiver);
}
} catch (e) {}
isRegistered = false;
console.log('unregisterReceiver');
}
}
};
var demo = function(msgs) {
//操作短信
for (var i = 0, len = msgs.length; i < len; i++) {
var content = msgs[i].getDisplayMessageBody();
console.log(content)
unithis.body = content
}
}
register(demo);
},
requestLocation() {
var permissionArr = ['android.permission.READ_SMS', 'android.permission.RECEIVE_SMS',
'android.permission.RECEIVE_MMS'
]
plus.android.requestPermissions(permissionArr, function(e) {
if (e.deniedAlways.length > 0) { //权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
console.log('Always Denied!!! ' + e.deniedAlways.toString());
}
if (e.deniedPresent.length > 0) { //权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
console.log('Present Denied!!! ' + e.deniedPresent.toString());
}
if (e.granted.length > 0) { //权限被允许
//调用依赖获取定位权限的代码
console.log('Granted!!! ' + e.granted.toString());
}
}, function(e) {
console.log('Request Permissions error:' + JSON.stringify(e));
});
this.monitor()
},
}
}
</script>
最后在父组件里引用
// 获取短信验证码
let codess = this.$refs.sms.body
let codeRegex = /[0-9]{4}/g;
if(codess && codess.includes('主要文本内容')) {
let magex = codess.match(codeRegex)
if(magex.length > 0) {
this.captcha = magex[0]
}
}