| <template> | |
| 	<view class="yingbing-battery"> | |
| 		<view class="yingbing-battery-wrapper" :style="{ | |
| 			'border-color': color | |
| 		}"> | |
| 			<view class="yingbing-battery-content"> | |
| 				<view class="yingbing-battery-content-value" :style="{ | |
| 					'background-color': color, | |
| 					width: value + 'px' | |
| 				}"> | |
| 				</view> | |
| 			</view> | |
| 		</view> | |
| 		<view class="yingbing-battery-top" :style="{ | |
| 			'background-color': color | |
| 		}"></view> | |
| 	</view> | |
| </template> | |
| 
 | |
| <script> | |
| 	const max = 16 | |
| 	export default { | |
| 		inject: ['getColor'], | |
| 		computed: { | |
| 			color () { | |
| 				return this.getColor() | |
| 			} | |
| 		}, | |
| 		data () { | |
| 			return { | |
| 				value: max | |
| 			} | |
| 		}, | |
| 		// #ifdef APP-PLUS | |
| 		beforeDestroy() { | |
| 			if ( this.recevier ) { | |
| 				plus.android.runtimeMainActivity().unregisterReceiver(this.recevier) | |
| 			} | |
| 		}, | |
| 		// #endif | |
| 		created () { | |
| 			this.getBattery() | |
| 		}, | |
| 		methods: { | |
| 			getBattery () { | |
| 				// #ifdef H5 | |
| 				//window.navigator.getBattery只能在安全环境下(比如:https file:///url)使用,判断一下避免报错 | |
| 				window.navigator.getBattery && window.navigator.getBattery().then((res) => { | |
| 				    // 电池电量在0到1之间,因此我们将其乘以100得出百分比 | |
| 				    this.value =  res.level * max | |
| 				}); | |
| 				// #endif | |
| 				// #ifdef MP-WEIXIN | |
| 				wx.getBatteryInfo({ | |
| 					success: (res) => { | |
| 						this.value = (res.level / 100) * max | |
| 					} | |
| 				}) | |
| 				// #endif | |
| 				// #ifdef APP-PLUS | |
| 				uni.getSystemInfo({ | |
| 					success: (res) => { | |
| 						if ( res.osName == 'android' ) { | |
| 							const main = plus.android.runtimeMainActivity() | |
| 							const Intent = plus.android.importClass('android.content.Intent'); | |
| 							this.recevier = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  | |
| 								onReceive: (context, intent) => {  | |
| 							       let action = intent.getAction();  | |
| 							       if (action == Intent.ACTION_BATTERY_CHANGED) {  | |
| 							           	let level = intent.getIntExtra("level", 0); //电量 B5教程网  | |
| 										this.value = (level / 100) * max | |
| 										main.unregisterReceiver(this.recevier)//销毁注册广播 | |
| 										//let voltage = intent.getIntExtra("voltage", 0); //电池电压  | |
| 										//let temperature = intent.getIntExtra("temperature", 0); //电池温度  | |
| 							           //如需获取别的,在这里继续写,此代码只提供获取电量  | |
| 							       }  | |
| 							    }  | |
| 							});  | |
| 							const filter = plus.android.newObject('android.content.IntentFilter', Intent.ACTION_BATTERY_CHANGED);  | |
| 							main.registerReceiver(this.recevier, filter); | |
| 						} else if ( res.osName == 'ios' ) { | |
| 							const UIDevice = plus.ios.import("UIDevice"); | |
| 							const dev = UIDevice.currentDevice();  | |
| 							if (!dev.isBatteryMonitoringEnabled()) {  | |
| 							    dev.setBatteryMonitoringEnabled(true);  | |
| 							}  | |
| 							let level = dev.batteryLevel(); | |
| 							this.value = level * max | |
| 						} | |
| 					} | |
| 				}) | |
| 				// #endif | |
| 			} | |
| 		} | |
| 	} | |
| </script> | |
| 
 | |
| <style scoped> | |
| 	.yingbing-battery { | |
| 		/* #ifndef APP-NVUE */ | |
| 		display: flex; | |
| 		/* #endif */ | |
| 		flex-direction: row; | |
| 		align-items: center; | |
| 		opacity: 0.5; | |
| 	} | |
| 	.yingbing-battery-wrapper { | |
| 		width: 20px; | |
| 		height: 9px; | |
| 		border-width: 1px; | |
| 		border-style: solid; | |
| 		padding: 1px; | |
| 		/* #ifndef APP-NVUE */ | |
| 		display: flex; | |
| 		flex-direction: column; | |
| 		box-sizing: border-box; | |
| 		overflow: hidden; | |
| 		/* #endif */ | |
| 	} | |
| 	.yingbing-battery-content { | |
| 		flex: 1; | |
| 		/* #ifndef APP-NVUE */ | |
| 		display: flex; | |
| 		flex-direction: column; | |
| 		box-sizing: border-box; | |
| 		overflow: hidden; | |
| 		/* #endif */ | |
| 	} | |
| 	.yingbing-battery-content-value { | |
| 		height: 5px; | |
| 	} | |
| 	.yingbing-battery-content-value-text { | |
| 		font-size: 8px; | |
| 	} | |
| 	.yingbing-battery-top { | |
| 		width: 2px; | |
| 		height: 5px; | |
| 	} | |
| </style> |