Unity 安卓wifi强度

第一步:查看当前所有wifi源:

 private String WifiSource() {  
        //result  返回UNITY的信息  
    	 String result="";
    	 try {  
    		   
    	        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);  
    	        WifiInfo info = wifiManager.getConnectionInfo();  
                List<ScanResult> list = wifiManager.getScanResults();  
                //显示当前所有wifi
                if (list != null) {            	  
            	  result += "当前所有wifi的数量: " + list.size();              	  
                     for (ScanResult scanResult : list) {  
                         int nSigLevel = WifiManager.calculateSignalLevel(scanResult.level, 5);  
                         result +="   |Wifi名称:" + scanResult.SSID + "    wifi信号强度:"  + scanResult.level + "-" + nSigLevel;   
                 }  
             }else  
             {  
            	 result +="            |list is null";  
             }  
              
               
         } catch (Exception e) 
         {  
             e.printStackTrace();  
             result +="c错误:"+e;  
         } 
         return result; 
   } 
第二查看你当前wifi的情况:

private String ObtainWifiInfo() {  
    	         // Wifi的连接速度及信号强度:  
    	         String result="";
    	         WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);   
    	         WifiInfo info = wifiManager.getConnectionInfo();  
    	         if (info.getBSSID() != null) {  
    	             // 链接信号强度  
    	            int strength = WifiManager.calculateSignalLevel(info.getRssi(), 5);  
    	             // 链接速度  
    	             int speed = info.getLinkSpeed();  
    	             // 链接速度单位  
    	             String units = WifiInfo.LINK_SPEED_UNITS;  
    	             // Wifi源名称  
    	             String ssid = info.getSSID();     	             
    	             String mac = info.getMacAddress(); 
    	             result +="  |mac地址:"+mac+"  |wifi名称:"+ssid+"   |链接信号强度    :"+strength+"   |链接速度    :"+speed+units;   	        
    	         }
     	         return result;  
    	    }  
Unity上的使用方法:

if (GUI.Button(new Rect(10, 790, 140, 40), "获取WIFI全"))
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            wifiData = jo.Call<string>("WifiSource");
            log.text += wifiData;
        }
        if (GUI.Button(new Rect(10, 850, 140, 60), "自己wifi"))
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            wifiData = jo.Call<string>("ObtainWifiInfo");
            log.text += wifiData;
        }
xml配置文件需要的权限:

 <!-- 获取手机信号权限和网络连接权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNEY" />
 主要内容大体就是上面这样,不过项目没要求这么多,我就单独获取了一下电量数值,和wifi强度 
 

Eclips项目:

package cn.wyq.qp;

import java.io.File;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

     private static Context instance;
	 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = getApplicationContext();
    }
      
    //获取wifi强度  2017年10月16日
    private int ObtainWifiInfo() 
    {  
    	int wifiInfo = 0;
        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);   
        WifiInfo info = wifiManager.getConnectionInfo(); 
        try { 
             if (info.getBSSID() != null) 
             {  
               // 链接信号强度  
               int strength = WifiManager.calculateSignalLevel(info.getRssi(), 5);          
               wifiInfo = strength;        
             }
           }catch (Exception e) 
           {  
              e.printStackTrace();              
           } 
        return wifiInfo;     
   } 
    
    //获取手机电量强度   2017年10月16日
    public int MonitorBatteryState() {  
    	int level = -1;
    	IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);  
        Intent intent = instance.registerReceiver(null,ifilter);  
        int rawlevel = intent.getIntExtra("level", 0);//获得当前电量
        int scale = intent.getIntExtra("scale", 0);//获得总电量           
        if (rawlevel > 0 && scale > 0) 
        {
            level = (rawlevel * 100) / scale;
        }
        else
        {
        	 level = -1;
        }
        return level;
    }
    
}
Unity 项目:

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class UICopy : MonoBehaviour { 
 
#region 读取手机电量
        //读取手机电量
        #endregion
        int GetBatteryLevel()
        {
            try
            {


#if UNITY_ANDROID
                        //这是Unity本身的api,不过华为手机获取不到电量
                 //string CapacityString = System.IO.File.ReadAllText("/sys/class/power_supply/battery/capacity"); 
 
                //return int.Parse(CapacityString);
                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
                int batteryData = jo.Call<int>("MonitorBatteryState");
                return batteryData;
#endif
            }
            catch (Exception e)
            {               
                //Debug.Log("读取电量失败; " + e.Message);
            }
            return -1;
        }#region 读取手机网络状态
        //读取手机网络状态
#endregion
        void GetNetWoker()
        {
            //网络不可用状态 这是Unity自身的API 能够区分无网 4G wifi
            if (Application.internetReachability == NetworkReachability.NotReachable)
            {
             //弹出框 提示用户已断网;
            }
            //当用户使用WiFi时 项目要求细化wifi强度 所以接的Android的源生API   
            else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
            {
            #if UNITY_ANDROID
                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
                int wifiInfo = jo.Call<int>("ObtainWifiInfo");
                if (wifiInfo == 1)
                {
                   
                                 //一格信号的状态标识

                }
                else if (wifiInfo == 2)
                {
                   
                               //2格信号的状态标识

                }
                else if (wifiInfo == 3)
                {
                   
			    //3格信号的状态标识

                }
                else if (wifiInfo == 4)
                {
                   
                             //4格信号的状态标识
                }
                else
                {
                    Debug.Log("wifi强度:" + wifiInfo);
                   
                }             
            #endif
            }
            //当用户使用移动网络时    
            else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
            {
               
            }
        }
 下一章研究 ios的显示wifi强度。编程之路漫漫长。 
 







猜你喜欢

转载自blog.csdn.net/m0_37583098/article/details/78247823