Unity获取Android和iOS手机系统电量及网络状况
2024-08-24 23:15:56
最开始考虑使用中间静态链接库来调用手机系统自带的API,但是在研究的过程中发现Android系统将电量等信息记录在了固定的文件中,所以只需要在C#中直接读取就可以而不需要中间库.
a.Android版
1.通过C#直接读取,下面的GetBatteryLevel()方法
- int GetBatteryLevel()
- {
- try
- {
- string CapacityString = System.IO.File.ReadAllText("/sys/class/power_supply/battery/capacity");
- return int.Parse(CapacityString);
- }
- catch (Exception e)
- {
- Debug.Log("Failed to read battery power; " + e.Message);
- }
- return -1;
- }
- }
b.iOS版
iOS需要用到xcode编写.a静态链接库
1.在xcode编写.mm文件,实现C++调用iOS的API得到手机电量,部分代码如下:
float getiOSBatteryLevel()
{
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
return [[UIDevice currentDevice] batteryLevel];
}
2.将上面.mm编译好的.a文件放入Unity工程Assets-Plugins-iOS下(路径不能错);在C#中使用下面的方法调用:
[ DllImport( "__Internal" )]
private static extern float getiOSBatteryLevel(); 在C#调用此函数就可获得iOS电量
至于网络状况,Unity自带API就可以获得
Application.interReachability
NetworkReachability.NotReachability网络不可达
NetworkReachability.ReachableViaCarrierDataNetwork 通过运营商数据网络可达
NetworkReachability.ReachableViaLocalAreaNetwork 通过局域网络可达(wifi)
NetworkReachability.ReachableViaLocalAreaNetwork 通过局域网络可达(wifi)
====================== 部分安卓手机不能使用,因为厂家可能修改文件结构,可以考虑下面的方法===============
在unity工程建立安卓通信,在安卓侧监听电量,主要使用如下代码
在主Activity里加入监听
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SystemUtil.registerBatteryReceiver(this);
}
监听方法
public static int getBatteryState() {
return batteryState;
} public static void registerBatteryReceiver(Context mainContext) {
if (batteryLevel == 0) {
BroadcastReceiver batteryReceiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
batteryLevel = intent.getIntExtra("level", 0); int curbatteryState = intent.getIntExtra("status", 0);
SetNewBatteryState(curbatteryState);
}
}
};
mainContext.registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
}
最新文章
- $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
- 【USACO 1.3】Barn Repair
- Java—继承、封装、抽象、多态
- 蓝牙防丢器原理、实现与Android BLE接口编程
- 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法
- rtx信息泄漏利结合弱口令导致被批量社工思路
- 开源(免费)三维 GIS(地形,游戏) 续1
- C++实现base64编码
- .net TxetBox控件设置ReadOnly=True后台取值问题
- 根据反射获取属性信息并创建DataTable
- BZOJ 1475: 方格取数( 网络流 )
- ListView排序并隔色显示
- java-成员方法/变量、类方法/变量等区别
- Hbase命令
- LeetCode算法题-Intersection of Two Arrays II(Java实现)
- zend studio调试
- CodeForces 430A Points and Segments (easy)(构造)题解
- L322
- MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)
- 洛谷 P4112 [HEOI2015]最短不公共子串 解题报告