最开始考虑使用中间静态链接库来调用手机系统自带的API,但是在研究的过程中发现Android系统将电量等信息记录在了固定的文件中,所以只需要在C#中直接读取就可以而不需要中间库.

  a.Android版

  1.通过C#直接读取,下面的GetBatteryLevel()方法

  1. int GetBatteryLevel()
  2. {
  3. try
  4. {
  5. string CapacityString = System.IO.File.ReadAllText("/sys/class/power_supply/battery/capacity");
  6. return int.Parse(CapacityString);
  7. }
  8. catch (Exception e)
  9. {
  10. Debug.Log("Failed to read battery power; " + e.Message);
  11. }
  12. return -1;
  13. }
  14. }

  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));
}
}

最新文章

  1. $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
  2. 【USACO 1.3】Barn Repair
  3. Java—继承、封装、抽象、多态
  4. 蓝牙防丢器原理、实现与Android BLE接口编程
  5. 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法
  6. rtx信息泄漏利结合弱口令导致被批量社工思路
  7. 开源(免费)三维 GIS(地形,游戏) 续1
  8. C++实现base64编码
  9. .net TxetBox控件设置ReadOnly=True后台取值问题
  10. 根据反射获取属性信息并创建DataTable
  11. BZOJ 1475: 方格取数( 网络流 )
  12. ListView排序并隔色显示
  13. java-成员方法/变量、类方法/变量等区别
  14. Hbase命令
  15. LeetCode算法题-Intersection of Two Arrays II(Java实现)
  16. zend studio调试
  17. CodeForces 430A Points and Segments (easy)(构造)题解
  18. L322
  19. MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)
  20. 洛谷 P4112 [HEOI2015]最短不公共子串 解题报告

热门文章

  1. NGUI动态字体的创建(font maker)
  2. elasticsearch 基础 —— 处理冲突及乐观并发控制
  3. tensorflow实现一个神经网络简单CNN网络
  4. 218- VPX主板 基于5VFX70T的3U VPX 光纤数据采集存储板
  5. 事件日期转BCD码
  6. docker初学
  7. STM32中stm32f0xx_flash.icf文件的作用详解!(不错的!)
  8. Ubuntu12.04安装配置vncserver
  9. 正则表达式中的Quantifiers
  10. Linux用户登出之后保持后台进程(nohup)