uniapp获得手机通话记录、短信等权限

这篇具有很好参考价值的文章主要介绍了uniapp获得手机通话记录、短信等权限。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.获得通话记录权限

        //获得通话权限

		plus.android.requestPermissions(['android.permission.READ_CALL_LOG', 'android.permission.WRITE_CALL_LOG', 'android.permission.CALL_PHONE'], (res) => {
			if (res.granted.length > 0) {
				console.log('已授权');
				this.permisionObj[4].state = true;
			} else {
				console.log('请先授权!');
				this.permisionObj[4].state = false;
			}
		});

获取通话记录

import { parseTime } from '@/utils/format.js';
import permision from '@/js_sdk/wa-permission/permission.js';
import { gotoAppPermissionSetting } from '@/js_sdk/wa-permission/permission.js';

        async getCalllog() {
			//检查授权
			var result = await permision.requestAndroidPermission(['android.permission.READ_CALL_LOG', 'android.permission.WRITE_CALL_LOG', 'android.permission.CALL_PHONE']);
			var strStatus;
			if (result == 1) {
				strStatus = '已获得授权';
			} else {
				uni.showToast({
					title: '读通话记录权限未开启',
					icon: 'none'
				});
				setTimeout(() => {
					uni.hideToast();
				}, 5000);
			}

			var CallLog = plus.android.importClass('android.provider.CallLog');
			var Activity = plus.android.runtimeMainActivity();
			var ContentResolver = plus.android.importClass('android.content.ContentResolver');
			var resolver = Activity.getContentResolver();
			plus.android.importClass(resolver);
			var String = plus.android.importClass('java.lang.String');
			var cs = resolver.query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);

			uni.showLoading({
				title: '匹配通话记录中..'
			});
			var count = 0; // 记录多少条 用于处理循环跳出
			while (plus.android.invoke(cs, 'moveToNext')) {
				count++;
				console.log(count);
				let talist = {
					// 联系人姓名
					xm: plus.android.invoke(cs, 'getString', plus.android.invoke(cs, 'getColumnIndex', CallLog.Calls.CACHED_NAME)),
					telphone: plus.android.invoke(cs, 'getString', plus.android.invoke(cs, 'getColumnIndex', CallLog.Calls.NUMBER)),
					// 通话时长
					duration: plus.android.invoke(cs, 'getString', plus.android.invoke(cs, 'getColumnIndex', CallLog.Calls.DURATION)),
					date: plus.android.invoke(cs, 'getString', plus.android.invoke(cs, 'getColumnIndex', CallLog.Calls.DATE)),
					type: plus.android.invoke(cs, 'getString', plus.android.invoke(cs, 'getColumnIndex', CallLog.Calls.TYPE))
				};
				talist.date = this.parseTime(talist.date);
				switch (talist.type) {
					// 判断通话类型
					case '1':
						talist.type = ' 呼入 ';
						break;
					case '2':
						talist.type = ' 呼出 ';
						break;
					case '3':
						talist.type = ' 未接 ';
						break;
					default:
						talist.type = ' 挂断 ';
						break;
				}

				if (count > 100) {
					break;
				}
				this.telphoneLog.push(talist);
			}
			uni.hideLoading();
		},

permission.js中部分代码(参考插件App权限判断和提示 - DCloud 插件市场)文章来源地址https://www.toymoban.com/news/detail-848989.html

// Android权限查询
function requestAndroidPermission(permissionID) {
	return new Promise((resolve, reject) => {
		plus.android.requestPermissions(
			[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
			function(resultObj) {
				var result = 0;
				for (var i = 0; i < resultObj.granted.length; i++) {
					var grantedPermission = resultObj.granted[i];
					console.log('已获取的权限:' + grantedPermission);
					result = 1
				}
				for (var i = 0; i < resultObj.deniedPresent.length; i++) {
					var deniedPresentPermission = resultObj.deniedPresent[i];
					console.log('拒绝本次申请的权限:' + deniedPresentPermission);
					result = 0
				}
				for (var i = 0; i < resultObj.deniedAlways.length; i++) {
					var deniedAlwaysPermission = resultObj.deniedAlways[i];
					console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
					result = -1
				}
				resolve(result);
				// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
				// if (result != 1) {
				// 	gotoAppPermissionSetting()
				// }
			},
			function(error) {
				console.log('申请权限错误:' + error.code + " = " + error.message);
				resolve({
					code: error.code,
					message: error.message
				});
			}
		);
	});
}
// 跳转到**应用**的权限页面
function gotoAppPermissionSetting() {
	if (isIos) {
		var UIApplication = plus.ios.import("UIApplication");
		var application2 = UIApplication.sharedApplication();
		var NSURL2 = plus.ios.import("NSURL");
		// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");		
		var setting2 = NSURL2.URLWithString("app-settings:");
		application2.openURL(setting2);

		plus.ios.deleteObject(setting2);
		plus.ios.deleteObject(NSURL2);
		plus.ios.deleteObject(application2);
	} else {
		// console.log(plus.device.vendor);
		var Intent = plus.android.importClass("android.content.Intent");
		var Settings = plus.android.importClass("android.provider.Settings");
		var Uri = plus.android.importClass("android.net.Uri");
		var mainActivity = plus.android.runtimeMainActivity();
		var intent = new Intent();
		intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
		var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
		intent.setData(uri);
		mainActivity.startActivity(intent);
	}
}

2.读取短信权限

	async getMsgs() {
			//检查、获取授权
			var result = await permision.requestAndroidPermission('android.permission.READ_SMS');
			var strStatus;
			if (result == 1) {
				strStatus = '已获得授权';
			} else {
				uni.showToast({
					title: '读短信权限未开启',
					icon: 'none'
				});
				setTimeout(() => {
					uni.hideToast();
				}, 2000);
			}

            //获得短信内容
			var main = plus.android.runtimeMainActivity();
			var Uri = plus.android.importClass('android.net.Uri');
			var ContactsContract = plus.android.importClass('android.provider.ContactsContract');
			var uri = Uri.parse('content://sms/');
			var cr = main.getContentResolver();
			plus.android.importClass(cr);
			var cur = cr.query(uri, null, null, null, null);
			plus.android.importClass(cur);
			cur.moveToFirst();

			uni.showLoading({
				title: '匹配短信记录中..'
			});

			// 这一块设置了拿到当前时间的前五分钟,默认是获取全部的短信信息
			// 小米系统默认拿到的不是全部短信信息,需要在权限中开启"通知类短信"这个权限才能拿到全部
			let newdata = new Date().getTime();
			// 拿到当前时间的前五分钟
			let fiveMinsAgo = new Date(newdata - 3 * 30 * 24 * 60 * 60 * 1000).getTime();
			var selection = 'date > ' + fiveMinsAgo;
			var cur = cr.query(uri, null, selection, null, null);

			while (cur.moveToNext()) {
				let newObj = {};
				// 发送人号码
				var index_Address = cur.getColumnIndex('address');
				var address = cur.getString(index_Address);
				newObj.telphone = address;
				// console.log('发送人号码:' + address);
				//短信内容
				var index_Body = cur.getColumnIndex('body');
				var body = cur.getString(index_Body);
				newObj.content = body;
				// console.log('短信内容:' + body);
				

				//短信类型1接收 2发送
				var index_Type = cur.getColumnIndex('type');
				var type = cur.getString(index_Type);
				newObj.type = type;
				// console.log('短信类型:' + type);
				// 发送日期
				var smsDate = cur.getString(cur.getColumnIndex('date'));
				smsDate = this.parseTime(smsDate);
				newObj.sendDate = smsDate;
				// console.log('发送日期:' + smsDate);
				this.msgList.push(newObj);
			}
			cur.close();
			uni.hideLoading();
		}

到了这里,关于uniapp获得手机通话记录、短信等权限的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp获取手机通知权限

    之前发了一篇使用插件市场获取权限的文章,但是有兄弟想要一个单独开启通知权限的教程,这篇文章特意整理一下获取通知权限跳转开启的方法 首先我是设置了一个弹窗通知,具体样式就不在这里写了,可以自行写一个,我在这里就写一下具体获取以及跳转的代码 上面是

    2024年02月12日
    浏览(41)
  • adb 读取短信,通话记录、日历、通讯录等的方法

    读取手机短信: 这将列出所有短信消息的详细信息,例如短信内容、发送者和接收者的电话号码、时间戳等。 读取手机通话记录: 这将列出所有通话记录的详细信息,例如通话类型、通话时间、对方号码、通话持续时间等。 读取手机日历: 这将列出所有日历事件的详细信

    2024年02月12日
    浏览(33)
  • uniapp 获取手机定位权限及禁止拒绝后跳转设置页面

    问题:获取手机定位权限,在用户点击拒绝后,再次点击定位按钮,手机无反应。这里,安卓系统2次拒绝之后,默认为禁止询问弹窗弹出,所以再点击定位肯定没有反应。 一、解决思路:第一想到,检查是否打开GPS功能(Android),打开了直接跳转到地图定位页面,关闭状态

    2024年02月03日
    浏览(50)
  • 解决uniapp手机端获取用户设备是否授权,进行授权提示,获取用户相机授权(Android 权限清单整理)

    最近在上架app时遇到了一些授权询问的问题,在这里简单记录一下,主要使用的是uniapp进行开发,在官网中有说明使用uni.authorize()进行授权请求,但是该方法不支持h5和app,所以采用plus.android.requestPermissions()方法进行授权判断操作,话不多说直接上代码 以下代码进行的

    2024年02月05日
    浏览(53)
  • uniapp 微信小程序保存图片到系统相册(包括获取手机相册权限)即拿即用

    1. 代码,即拿即用 2. 介绍使用到的方法 1. uni.getSetting uniapp官网链接: https://uniapp.dcloud.io/api/other/setting.html#getsetting 2. uni.authorize 链接:https://uniapp.dcloud.io/api/other/authorize.html#authorize 3. uni.saveImageToPhotosAlbum 链接: https://uniapp.dcloud.io/api/media/image.html#saveimagetophotosalbum 4. uni.openSe

    2024年02月11日
    浏览(59)
  • uniapp开放小程序获取手机号失败 getPhoneNumber:fail no permission 没有权限

    控制台打印返回信息、 查了官方资料,必须要公司注册,且微信认证过的小程序,才能获取到手机号的接口权限, 登录小程序后台、 设置菜单、查看自己是否认证 、 重点!!! 可以复用 公众号的资质,无需再花费 300 认证费了哦!!

    2024年02月13日
    浏览(62)
  • 手机通话记录生成器在线,通话记录生成器下载,通话记录生成器app

    在了解通话记录生成器app的时候,铁牛通话记录生成器是一个为用户一键自动生成通话记录的app。如何得到“铁牛通话记录生成器”?在手机上进去佰渡baidu搜嗦,铁牛通话记录生成器,这几个字就可以,其他的不用输入。或者你看这个几个字母jp155再加上一个点com,手动输入

    2024年02月08日
    浏览(86)
  • 在 Android 上恢复已删除的通话记录 - 安卓手机通话记录恢复技巧

    有时,Android 用户会在内存空间用完时删除他们的通话记录。他们认为那些电话通话记录将不再需要了,但突然出于某些原因他们需要恢复那些已删除的通话记录。 恢复已删除的照片、视频、音乐、短信和通话记录等数据在以前是一件很难的事情。但是现在如果你想恢复一个

    2024年02月08日
    浏览(49)
  • uni-app通过uni.getSystemInfoSync()获得的手机信息

    突发奇想,记录一下,hbuilder的真机测试可以获取到哪些手机信息。 console.log(uni.getSystemInfoSync()) 打印之后的信息为: 假设,我设计一个页面,设计图如下所示:已知button部分的高度为100rpx,空白求空白部分的高度。 设:空白部分高度为heightW,空白部分的高度为: uni.height

    2024年02月20日
    浏览(36)
  • 如何从 Android 手机免费恢复已删除的通话记录/历史记录?

    有一个有合作意向的人给我打电话,但我没有接听。更糟糕的是,我错误地将其删除,认为这是一个骚扰电话。那么有没有办法从 Android 手机恢复已删除的通话记录呢?”  塞缪尔问道。 如何在 Android 上恢复已删除的通话记录 ?如果您的 Android 数据没有备份,那么您必须寻

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包