Unity获取Android和iOS手机系统电量及网络状况
2016-01-10 11:50
609 查看
最开始考虑使用中间静态链接库来调用手机系统自带的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#中使用下面的方法调用:
至于网络状况,Unity自带API就可以获得
Application.interReachability
NetworkReachability.NotReachability网络不可达
NetworkReachability.ReachableViaCarrierDataNetwork 通过运营商数据网络可达
NetworkReachability.ReachableViaLocalAreaNetwork 通过局域网络可达(wifi)
====================== 部分安卓手机不能使用,因为厂家可能修改文件结构,可以考虑下面的方法===============
在unity工程建立安卓通信,在安卓侧监听电量,主要使用如下代码
在主Activity里加入监听
监听方法
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)
====================== 部分安卓手机不能使用,因为厂家可能修改文件结构,可以考虑下面的方法===============
在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)); } }
相关文章推荐
- AFN网络框架(session的简单示例)
- 有关网络包长度与校验和的研究
- 沟谷网络提取及沟壑密度计算
- 用perl发送http请求
- TCP/IP illustrated 阅读笔记(二) 网络地址架构
- 网络操作学习 笔记
- HTTP中的状态码
- linux网络设备驱动(二)
- Linux网络设备驱动(一)
- 记在centos中连接无线网络的一次过程
- Linux下的网络配置方法(一)
- Linux下的网络配置方式(二)
- HttpHandler与HttpModule的用处与区别
- 浅析计算机网络(5)-选路算法
- linux下网络数据包抓取工具tcpdump学习小结
- Http authorization 实现简单的网页用户密码验证
- iOS开发工具-网络封包分析工具Charles
- HttpClient
- 使用netperf测试网络性能
- wsgi