uniapp监听短信验证码并填入输入框

代码如下,主要代码来自于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]
	}
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值