uniapp开发安卓跟ios所遇问题集合

news2024/11/23 21:10:31

Android平台配置CPU类型

一般勾选armeabi-v7a跟arm64-v8a就好了

  • armeabi-v7a 第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。
  • arm64-v8a 第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型,可以兼容使用armeabi-v7a的so库。
  • x86 少部分平板使用x86,AS模拟器中选了intel x86时使用x86处理器,以及其它常用三方模拟器通常使用x86

您的应用目前的目标 API 级别为 29,但其目标 API 级别必须最低为 30,这样才能确保应用基于最新 API 而构建

应用配置文件,加 targetSdkVersion:"30"

文档地址:uni-app官网

文档地址:uni-app官网

IOS隐私信息访问的许可描述

Appstore审核要求App在调用如下涉及隐私的API时必须说明调用原因

IOS自定义开屏启动界面

官网示例:uni-app官网

直接使用uniapp模板文件(点击下载)中提供的相对常用的 storyboard 模板,可在这个文件的基础上进行自定义图片,已经一些文本内容

应用版本名称跟应用版本号

在ios跟谷歌中上架,版本号需要不停的加一,不然无法上传到市场中

app国际化默认语言设置

一定要在这里设置

let i18nConfig = {
	locale:  uni.getLocale(),
	messages
}

pages.json中设置 tabBar list中的国际化

"tabBar": {
		"height": "50rpx",
		// 配置选中颜色
		"selectedColor": "#42dfbf",
		"color": "#b0b3bf", // 设置为与背景颜色相同
		"backgroundColor": "white", // 设置为透明
		// list 每一项
		"list": [{
				"iconPath": "./static/img/tabbar/new.png",
				"selectedIconPath": "./static/img/tabbar/new_sel.png",
				"pagePath": "pages/message/message",
				"text": "%nav.1%"
			}
		]
	}

安卓跟ios下拉刷新效果

 pages.json

{
    "pages": [
        {
        	"path": "pages/index/index",
        	"style": {
        		"navigationBarTitleText": "下拉刷新",
        		"enablePullDownRefresh": true
        	}
        }
    ]
}

index.vue

export default {
	data() {
		return {
			text: '下拉刷新'
		}
	},
	onLoad: function (options) {
        //开始下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致
		uni.startPullDownRefresh();
	},
	onPullDownRefresh() {
       //一秒后停止刷新动画
		setTimeout(function () {
			uni.stopPullDownRefresh();
		}, 1000);
	}
}

iOS 取消底部的空白区域

"safearea" : {
            //安全区域配置,仅iOS平台生效  
            "bottom" : {
                // 底部安全区域配置  
                "offset" : "none" // 底部安全区域偏移,"none"表示不空出安全区域,"auto"自动计算空出安全区域,默认值为"none"  
            }
        }

app蓝牙开锁

官网相关文档:uni-app官网

先初始化蓝牙,然后开始搜寻蓝牙,开始搜寻后设置一个延时,超过一定时间取消搜寻 然后提示连接失败。如果找到了对应的设备,获取到设备信息,也关闭蓝牙搜寻。然后正式连接设备,连接成功设置uni.setBLEMTU 蓝牙最大传输单元,避免命令行太长无法传输到设备中。

最后获取蓝牙设备所有服务,然后获取蓝牙设备某个服务中所有特征值,然后就可以写入命令了,一般是要将字符串转为二进制数据,也就是字节数据,我在这个踩了很久,附上我转换成功的代码

function hexStringToArrayBuffer(str) {
				if (!str) {
					return new ArrayBuffer(0);
				}
				var buffer = new ArrayBuffer(str.length);
				let dataView = new DataView(buffer)
				for (let i = 0; i < str.length; i++) {
					// console.log('str.charAt(i).charCodeAt()', str.charAt(i).charCodeAt())
					dataView.setUint8(i, str.charAt(i).charCodeAt()) // 必须是Unicode 编码
				}
				return buffer;
			}

const inputString = `(${state.DeviceID},x,xxx,xxxx,xxxxx)`;
const bytes = hexStringToArrayBuffer(inputString);

完整代码: 

uni.openBluetoothAdapter({ //首先初始化蓝牙
							success(res) {
						        console.log('1')
								uni.startBluetoothDevicesDiscovery({ //这里是开启蓝牙搜寻
									success: (res) => {
										console.log('2')
										setTimeout(() => {
											unlockingTimeout.push(setInterval(()=>{
												exceptionPrompt('未搜尋到藍牙鎖,可嘗試重新打開藍牙')
												claerUnlockingTimeout()
												uni.stopBluetoothDevicesDiscovery({ //当找到匹配的蓝牙后就关掉蓝牙搜寻
													success(res) {
													}
												})
											}, 25000))
				                            state.progressSta = true
											drawCircle(item, index)
										}, 100)
										uni.onBluetoothDeviceFound((res) => { //这一步是监听返回的蓝牙设备 
										    uni.getBluetoothDevices({
										    	success: res => {
										    		console.log('2.5',res.devices)
										    		res.devices.forEach(device => { //这一步就是去筛选找到的蓝牙中
										    			if (device.name == item.imei) {
										    				uni.stopBluetoothDevicesDiscovery({ //当找到匹配的蓝牙后就关掉蓝牙搜寻
										    					success(res) {
										    					}
										    				})
										    				console.log('3',device.deviceId)
										    				state.DeviceID = device.deviceId 
										    				state.deviceName = item.imei
										    				uni.createBLEConnection({ //连接低功耗蓝牙设备
										    					deviceId: state.DeviceID, //传入刚刚获取的uuid  
										    					success(res) {
										    						console.log('4',state.DeviceID)
										    						setTimeout(function() {
										    							uni.setBLEMTU({
										    								deviceId: state.DeviceID,
										    								mtu: 300,
										    								success(res) {
										    									console.log('设置成功', res)
										    								},
										    								fail(err) {
										    									console.log('设置失败', err)
										    								}
										    							})
										    						}, 300)
										    						setTimeout(function() {
										    							uni.getBLEDeviceServices({ //获取蓝牙设备所有服务  
										    								deviceId: state.DeviceID,
										    								success(res) {
										    									console.log('5',res)
										    									if (uni.getSystemInfoSync().platform == "ios") {
										    										state.servicesList = res.services[0].uuid
										    									}else{
										    										state.servicesList = res.services[2].uuid
										    									}
										    									uni.getBLEDeviceCharacteristics({ //获取蓝牙设备某个服务中所有特征值  
										    										deviceId: state.DeviceID,
										    										serviceId: state.servicesList,
										    										success(res) {
										    											console.log('6')
										    											state.characteristicList = res.characteristics
										    											uni.notifyBLECharacteristicValueChange({
										    												state: true,
										    												deviceId: state.DeviceID,
										    												serviceId: state.servicesList,
										    												characteristicId: state.characteristicList[2].uuid,
										    												success(res) {
										    													console.log('连接成功', res)
										    													uni.onBLECharacteristicValueChange((res) => {
										    														console.log(`characteristic ${JSON.stringify(res)} has changed`)
										    														let hhh = ab2hex(res.value)
										    														console.log("监听成功", hexCharCodeToStr(hhh))
										    													})
										    													setTimeout(() => {
										    														sendInstruction(item)
										    													}, 500)
										    												},
										    												fail(res) {
										    													exceptionPrompt()
										    													console.log(JSON.stringify(res))
										    												}
										    											})
										    										},
										    										fail(res) {
										    											if (uni.getSystemInfoSync().platform == "ios") {
										    												if(res.code == '10012'){
										    													state.defeated = false
										    													state.progressSta = false
										    													state.progress = 0
										    													state.lockhead = true
										    													state.textSta = instance.proxy.$t('bluetooth.8')
										    												    messagePopup.value.showMessage('warn', '未找到設備,請重試')
										    												}
										    											}
										    											console.log(JSON.stringify(res))
										    										}
										    									})
										    								},
										    								fail(res) {
										    									exceptionPrompt()
										    									console.log(JSON.stringify(res))
										    								}
										    							})
										    						}, 1500)
										    				    },
										    					fail(res) {
										    						if(res.code == '10012'){
										    							state.defeated = false
										    							state.progressSta = false
										    							state.progress = 0
										    							state.lockhead = true
										    							state.textSta = instance.proxy.$t('bluetooth.8')
										    						    messagePopup.value.showMessage('warn', '連接超時,請重試')
										    						}
										    						console.log(res)
										    					}
										    				})
										    			}
										    		})
										    	},
										    	fail: e => {
										    		console.log(e)
										    	}
										    });
										})
									}
								})
							},
							fail(res) {
								if (res.code == 10001) {
									messagePopup.value.showMessage('warn', "藍牙是否打開")
								} else {
									messagePopup.value.showMessage('warn', res.errMsg)
								}
							}
						})

其他蓝牙开锁文章:uni-app蓝牙开锁篇 - DCloud问答

uni-app使用蓝牙 - 伟衙内 - 博客园 (cnblogs.com)

app中绘制图表

uChar插件文档地址:uCharts官网 - 秋云uCharts跨平台图表库

app实现国际化功能

使用uni-hello-i18n,官方有示例

示例地址:hello-i18n 示例工程 - DCloud 插件市场

官方文档:uni-app官网 

补充,国际化的繁体、简体跟英文一定要设置为 zh-Hant、zh-Hans、en 因为uniapp的内置插件会根据这个也进行国际化的切换

import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
export default {
	en,
	'zh-Hans': zhHans,
	'zh-Hant': zhHant
}

app二维码

插件地址:uQRCode 全端二维码生成插件 支持nvue 支持nodejs服务端 - DCloud 插件市场

<uqrcode ref="uqrcode" canvas-id="qrcode" :value="qrcodeData" :options="{ margin: 10 }"></uqrcode>


<script>
	import {
		reactive,
		ref,
		toRefs,
		getCurrentInstance,
		onMounted
	} from 'vue';

	export default {
		setup() {
			let qrcodeData = ref('')
			let uqrcode = ref(null)

			function saveQRCode() {
				uqrcode.value.save({
					success: () => {
						messagePopup.value.showMessage('success', instance.proxy.$t('otherMy.9'))
					}
				})
			}
			return {
				...toRefs(state),
				qrcodeData,
				saveQRCode,
				uqrcode
			};
		}
	};
</script>

 未完待续... ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现顺序表的增删查改

现在让我们探索数据结构这个美妙的世界吧&#xff01; 概念介绍 线性表是具有相同特性的数据元素的有限序列。线性表是一种在实际运用中广泛运用的线性结构&#xff0c;如线性表&#xff0c;栈&#xff0c;队列&#xff0c;字符串等。 顺序表的本质是数组&#xff0c;实现了…

微信小程序使用icon图标

原因&#xff1a; 微信小程序使用fontawesome库使用icon图标&#xff0c;网上有很多教程&#xff0c;按照网上说法制作&#xff0c;引入到微信小程序中&#xff0c;但是验证成功&#xff0c;只能使用部分图标&#xff0c;结果不尽如人意。后面使用阿里巴巴开源iconfont来使用ic…

DBU-Net:用于乳腺超声图像中肿瘤分割的双分支U形网络

DBU-Net&#xff1a;用于乳腺超声图像中肿瘤分割的双分支U形网络 摘要引言材料和方法概述所提出的方法 DBU-Net Dual branch U-Net for tumor segmentation in breast ultrasound images 摘要 乳腺超声医学图像通常具有低成像质量沿着不清楚的目标边界。这些问题使得医生在诊断…

VSCode调试C++

1、环境准备 1.1、g的安装与使用 1.1.1、安装 方式一&#xff1a;Xcode安装 苹果的开发集成工具是Xcode.app&#xff0c;其中包含一堆命令行工具。 在 App store 可以看到其大小有好几个G&#xff0c;有点大。 方式二&#xff1a;Command Line Tools 安装 Command Line Too…

Ai音乐大师演示(支持H5、小程序)独立部署源码

Ai音乐大师演示&#xff08;支持H5、小程序&#xff09;独立部署源码

【开发问题】为什么Java写文件时文件名中带有“*”会写入失败呢?

前言&#xff1a;在开发过程中&#xff0c;可能会遇写文件的问题。当我们写文件时&#xff0c;文件名中可能会带“*”号。这时候可能会导致写文件失败。 比如有一段写文件的代码&#xff1a; public static void createFile(String filename, byte[] content) {FileOutputStr…

蓝桥杯刷题-四平方和

四平方和 代码&#xff1a; from copy import deepcopy n int(input()) maxn int(5e6) 10 dic dict() for a in range(maxn):if a * a > n:breakfor b in range(a,maxn):if a * a b * b > n:breakif dic.get(a*ab*b) is None:dic[a*ab*b] (a,b) ans [maxn for _ …

情感视频素材在哪找?8个视频素材大全网站

在追求创意表达的道路上&#xff0c;每一位视频创作者都是一名勇敢的探险家&#xff0c;不断寻找那些能够点亮作品、让故事生动起来的珍贵资源。无论你的目标是打动人心、传达信息&#xff0c;还是简单地分享生活&#xff0c;以下八个视频素材网站将为你的每一个项目提供无尽的…

【C++第三阶段】模板类模板通用数组实现案例

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 模板怎么使用模板函数模板注意事项普通函数与函数模板的区别普通函数与函数模板调用规则函数模板限制 类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函…

Linux网络协议栈从应用层到内核层④

文章目录 1、网卡接受数据2、网络设备层接收数据3、ip层接受数据4、tcp层接受数据5、上层应用读取数据6、数据从网卡到应用层的整体流程 1、网卡接受数据 当网卡收到数据时&#xff0c;会触发一个中断&#xff0c;然后就会调用对应的中断处理函数&#xff0c;再做进一步处理。…

WSL安装与使用

开启之后&#xff0c;会提示你重启电脑才能使配置生效&#xff0c;我们重启即可。 电脑重启后&#xff0c;打开Microsoft Store搜索WSL&#xff0c;既可以看到支持的操作系统&#xff0c;我们选择Ubuntu即可&#xff0c;我们选择第一个就可以。 随后我们打开&#xff0c;发现报…

【WebKit架构讲解】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

开源知识管理和协作平台:插件丰富,主题精美 | 开源日报 No.209

logseq/logseq Stars: 27.8k License: AGPL-3.0 logseq 是一个注重隐私的开源平台&#xff0c;用于知识管理和协作。 提供强大的知识管理、协作、PDF 标注和任务管理工具支持多种文件格式&#xff0c;包括 Markdown 和 Org-modeWhiteboard 功能可使用空间画布组织想法&#x…

vue源码解析——vue如何将template转换为render函数

Vue 将模板&#xff08;template&#xff09;转换为渲染函数&#xff08;render function&#xff09;是 Vue 编译器的核心功能&#xff0c;它是 Vue 实现响应式和虚拟 DOM 的关键步骤。在 Vue 中&#xff0c;模板&#xff08;template&#xff09;是开发者编写的类似 HTML 的代…

SAP FI学习笔记03 - 应付账款

上一章讲了MM与FICO的集成。 SAP FI学习笔记02 - 基础知识 - MM与FICO集成-CSDN博客 本章讲应付账款。 上一章也讲了应付账款&#xff08;買掛金&#xff09;&#xff0c;它的来源可以是 - 购买发注&#xff0c;入库&#xff0c;请求书照合 之后系统自动生成 &#xff08;具…

南京大学提出用于大模型生成的动态温度采样法,简单有效!

在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;已经在各种下游语言任务中展现出了卓越的性能。这些任务包括但不限于问答、摘要、机器翻译等。LLMs的强大能力在于其生成的文本质量和多样性。为了控制生成过程&#xff0c…

任意文件下载漏洞

1.文件下载漏洞存在的位置 文件经过php处理可能存在文件下载漏洞&#xff0c;配合目录遍历漏洞使用 2.目录遍历漏洞检验方法 测试是否存在目录遍历漏洞&#xff1a;在网站网址中间添加随意写一个文件名../&#xff08;返回上一级&#xff09;进行测试&#xff0c;没有报错就…

UART通信

UART——通用异步收发传输器&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输。在应用程序开发过程中使用频率较高的数据总线。 基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信…

基于springboot+vue实现的酒店客房管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

[Python学习篇] Python创建项目

新建项目 打开开发工具 PyCharm 选择 New Project 目录结构如下 运行 hello world 选中项目&#xff0c;右键 New -> Python File 进行创建文件 运行项目