Unity获取Android和iOS手机系统电量及网络状况

  最开始考虑使用中间静态链接库来调用手机系统自带的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));
        }
    }

 

 

转载于:https://www.cnblogs.com/BobbyWeaver/p/5118118.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值