uniapp原生导航实现城市定位和城市切换

效果图


在这里插入图片描述

原生导航配置

	{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "首页",
				"app-plus": {
					"titleNView": {
						"type": "transparent",
						"searchInput": {
							"backgroundColor": "rgba(231, 231, 231,.7)",
							"borderRadius": "16px",
							"placeholder": "请输入地址 如:大钟寺",
							// "disabled": true,
							"placeholderColor": "#606266"
							// "autoFocus": true
						},
						"buttons": [						
							{
								"text": "北京市",
								"fontSize": "14px",
								"width": "auto",
								"select": true,
								"color": "#303133",
								"float": "left",
								"background": "rgba(0,0,0,0)"
							}
						]
					}
				}
			}
		},

代码实现当前定位

//获取定位
			getLocation() {
				console.log(this.$mp, '111111');
				let platform = uni.getSystemInfoSync().platform;
				if (platform == 'ios') {
					plus.geolocation.getCurrentPosition((p) => {
						// console.log(p, "pppppppppppp")
						let city = p.address.city
						// console.log(city, 'city');

						let pages = getCurrentPages();
						let page = pages[pages.length - 1];
						if (city.length > 3) {
							city = city.substr(0, 3) + '...';
						}
						// #ifdef APP-PLUS
						var webview = this.$mp.page.$getAppWebview();
						webview.setTitleNViewButtonStyle(0, {
							text: city
						});
						// 选择的城市,显示到导航栏
						uni.getStorage({
							key: 'city',
							success: (res) => {
								var webview = this.$mp.page.$getAppWebview();
								// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
								webview.setTitleNViewButtonStyle(0, {
									text: res.data,
								});
								// 当前城市不是定位城市,显示切换城市提示
								if (city !== res.data) {
									this.showPos = true
									var webview = this.$mp.page.$getAppWebview();
									// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
									webview.setTitleNViewButtonStyle(0, {
										text: res.data,
									});
									// console.log("pppppppppppp")
								}
							},

						})

						// #endif
						// #ifdef H5
						// h5 临时方案
						document.getElementsByClassName('uni-btn-icon')[0].innerText = city;
						// #endif
					}, () => {
						// this.$msg('获取位置信息失败')
					})
				} else if (platform == 'android') {
					plus.geolocation.getCurrentPosition((p) => {
						let city = p.address.city
						// console.log(city);
						let pages = getCurrentPages();
						let page = pages[pages.length - 1];
						if (city.length > 3) {
							city = city.substr(0, 3) + '...';
						}
						// #ifdef APP-PLUS

						var webview = this.$mp.page.$getAppWebview();
						// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
						webview.setTitleNViewButtonStyle(0, {
							text: city,
						});
						uni.getStorage({
							key: 'city',
							success: (res) => {
								var webview = this.$mp.page.$getAppWebview();
								// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
								webview.setTitleNViewButtonStyle(0, {
									text: res.data,
								});
								if (city !== res.data) {
									this.showPos = true
									var webview = this.$mp.page.$getAppWebview();
									// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
									webview.setTitleNViewButtonStyle(0, {
										text: res.data,
									});
									// console.log("pppppppppppp")
								}
							},

						})


						// #endif
						// #ifdef H5
						// h5 临时方案
						document.getElementsByClassName('uni-btn-icon')[0].innerText = city;
						// #endif
					}, () => {
						// this.$msg('获取位置信息失败')
					}, {
						provider: 'baidu'
					})
				}
			},

记得getLocation该方法要在onLoad(){}生命周期调用一下哦!!!!!!!!!!!!

点击城市跳转路由时,怎样把选择的城市显示到首页????
在选择城市组件中加上以下代码即可,这里用的时uniapp的缓存

uni.setStorage({
					key: 'city',
					data: item.cityName,
					success() {

					}
				})
				uni.getStorage({
					key: 'city',
				})

首页拿到缓存数据,渲染到页面即可
把缓存数据写道OnShow(){}生命周期即可

onShow() {
			// 替换成选择的城市
			uni.getStorage({
				key: 'city',
				success: (res) => {
					var webview = this.$mp.page.$getAppWebview();
					// index: 按钮索引, style {WebviewTitleNViewButtonStyles } 
					webview.setTitleNViewButtonStyle(0, {
						text: res.data,
					});
				}
			})
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniapp原生开发,可以使用Android或iOS的原生API来实现监听蓝牙广播。以下是Android和iOS平台的实现方法: 1. Android平台 在Android平台上,可以使用Android蓝牙开发包(Android Bluetooth Low Energy)来实现监听蓝牙广播。具体步骤如下: (1)在AndroidManifest.xml文件添加蓝牙权限和服务声明: ``` <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <service android:name=".BluetoothLEService" android:enabled="true" android:exported="true" /> ``` (2)创建一个继承自BluetoothGattCallback的类,并在其实现onScanResult()方法监听蓝牙广播信息: ``` public class BluetoothLECallback extends BluetoothGattCallback { @Override public void onScanResult(int callbackType, ScanResult result) { // 处理蓝牙广播信息 } } ``` (3)在需要监听蓝牙广播的页面,创建一个BluetoothAdapter实例,并通过BluetoothAdapter.startLeScan()方法开始扫描蓝牙设备。同时,将BluetoothLECallback实例传入BluetoothAdapter.startLeScan()方法,以便在收到蓝牙广播时回调onScanResult()方法处理广播信息。示例代码如下: ``` private BluetoothAdapter mBluetoothAdapter; private BluetoothLECallback mBluetoothLECallback; // 初始化蓝牙适配器和回调实例 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothLECallback = new BluetoothLECallback(); // 开始扫描蓝牙设备 mBluetoothAdapter.startLeScan(mBluetoothLECallback); ``` 在上面的代码,我们创建了一个BluetoothAdapter实例和一个BluetoothLECallback实例,并通过mBluetoothAdapter.startLeScan()方法开始扫描蓝牙设备。当扫描到蓝牙设备时,会回调mBluetoothLECallback.onScanResult()方法,我们可以在该方法处理蓝牙广播信息。 2. iOS平台 在iOS平台上,可以使用CoreBluetooth框架来实现监听蓝牙广播。具体步骤如下: (1)在Info.plist文件添加蓝牙权限声明: ``` <key>NSBluetoothPeripheralUsageDescription</key> <string>需要使用蓝牙功能来连接设备</string> ``` (2)创建一个继承自CBCentralManagerDelegate的类,并在其实现centralManager(_:didDiscover:advertisementData:rssi:)方法监听蓝牙广播信息: ``` class BluetoothLEDelegate: NSObject, CBCentralManagerDelegate { func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { // 处理蓝牙广播信息 } } ``` (3)在需要监听蓝牙广播的页面,创建一个CBCentralManager实例,并将BluetoothLEDelegate实例传入CBCentralManager.init()方法,以便在收到蓝牙广播时回调centralManager(_:didDiscover:advertisementData:rssi:)方法处理广播信息。示例代码如下: ``` private var centralManager: CBCentralManager! private var bluetoothLEDelegate: BluetoothLEDelegate! // 初始化心管理器和回调实例 bluetoothLEDelegate = BluetoothLEDelegate() centralManager = CBCentralManager(delegate: bluetoothLEDelegate, queue: nil) // 开始扫描蓝牙设备 centralManager.scanForPeripherals(withServices: nil, options: nil) ``` 在上面的代码,我们创建了一个CBCentralManager实例和一个BluetoothLEDelegate实例,并通过centralManager.scanForPeripherals()方法开始扫描蓝牙设备。当扫描到蓝牙设备时,会回调bluetoothLEDelegate.centralManager(_:didDiscover:advertisementData:rssi:)方法,我们可以在该方法处理蓝牙广播信息。 以上就是在uniapp原生开发实现监听蓝牙广播的方法。需要注意的是,Android和iOS平台的实现方法略有不同,需要根据实际情况进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值