zoukankan      html  css  js  c++  java
  • 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));
            }
        }
  • 相关阅读:
    Android PopupWindow 弹窗背景半透明,设置最大高度
    Android性能优化之:ViewStub
    EventBus使用详解(一)——初步使用EventBus
    Android开发中,那些让你相见恨晚的方法、类或接口
    android 提高进程优先级 拍照永不崩溃(闪退)
    Android框架 加载图片 库 Picasso 的使用简介
    vc 取windows系统信息 版本 cpu信息 内存信息 ie版本信息 office版本
    VC 三点 划 曲线
    VC 类泡泡龙游戏算法
    vc 判断哪个按键 被按下 消息 按键 状态
  • 原文地址:https://www.cnblogs.com/BobbyWeaver/p/5118118.html
Copyright © 2011-2022 走看看