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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM