unity开发获取android手机的电量,WIFI的信息

这两天看见群里一直有人问怎么获取手机信息,问了一下,说要获取手机的电量 WiFi 时间这些信息,但是却没做过android的东西,也没有打过jar包,刚开始搞,尝试了很多次,说jar根本无法进行通信,弄得心灰意冷了,不想搞了。

记得以前在刚开始做unity和android沟通的时候,我也是这样的,当时好像写过这些模块,但是今天找了找,没找到,就重新写了一遍,看了一些网上的方法,发现比较繁琐,而且不符合我心目中模块式开发的理念,所有就在这里给大家发一下

首先,开发的原则就一句话,,尽可能简单粗暴无脑!

看这篇帖子之前,需要先知道androidstudio打jar包的方法,这是做这些的基础
又不会的可以去看看我的另一篇帖子,(直接点我的头像找一下我的博客就行,还没发表多少东西)

接下来给大家介绍方法
本人采用的是androidstudio+unity5.4.0版本。

打jar包的方法我就不介绍了,直接开始介绍android的方法

首先是获取Context的方法,应为电量WIFI这些都是需要context支持的,在这里参考了一下大佬们的方法,采用的是一种不常见的方法获取的,
参考:[1]: https://www.jianshu.com/p/808b9d92d6cd
private  Context instance;

    public void InitInstance(){
        if (instance==null){
            try {
                instance = (Application) Class.forName("android.app.ActivityThread").getMethod("currentApplication").invoke(null, (Object[]) null);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

直接获取Context 然后做一个判断
这里由于不懂android的语法,具体是怎么样的,所以只能采用本方法,在这里加了个判断,然后在调用的方法里面都去判断一下

然后是电量的查询 这里 registerReceiver(null, ifilter)的时候就必须要使用context,如果没有进行        InitInstance();  这里会直接报错,不返回任何东西
//返回电量信息
    public String    getBattery() {

        InitInstance();
        //https://www.jianshu.com/p/808b9d92d6cd

        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);//获得总电量
        int status = intent.getIntExtra("status", 0);//电池充电状态
        int health = intent.getIntExtra("health", 0);//电池健康状况
        int batteryV = intent.getIntExtra("voltage", 0);  //电池电压(mv)
        int temperature = intent.getIntExtra("temperature", 0);  //电池温度(数值)
        double T = temperature / 10.0; //电池摄氏温度,默认获取的非摄氏温度值,需做一下运算转换
        return  rawlevel+"|"+scale+"|"+status+"|"+health+"|"+batteryV+"|"+T;
    }

接下来是WIFI的信息
*这里getConnectionInfo的时候需要添加权限才能用,需要在manifest里面添加权限

否则,将什么都获取不到*

//获取wifi信号强度
    //wifiinfo.getRssi();获取RSSI,RSSI就是接受信号强度指示。
    //这里得到信号强度就靠wifiinfo.getRssi()这个方法。
    //得到的值是一个0到-100的区间值,是一个int型数据,其中0到-50表示信号最好,
    //-50到-70表示信号偏差,小于-70表示最差,
    //有可能连接不上或者掉线,一般Wifi已断则值为-200。
    @SuppressWarnings("deprecation")
    //返回WiFi信息
    public String getWifiInfo() {

        InitInstance();
        // Wifi的连接速度及信号强度:
        String result="";
        WifiManager wifiManager = (WifiManager) instance.getSystemService(Context.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();
            int ip = info.getIpAddress();
            String netMac =  info.getBSSID();
            String mac = info.getMacAddress();
            result = strength+"|"+intToIp(ip)+"|"+mac+"|"+ssid;
        }
        return result;
    }
    //转换IP地址
    public String intToIp(int paramInt) {
        return (paramInt & 0xFF) + "." + (0xFF & paramInt >> 8) + "." + (0xFF & paramInt >> 16) + "."
                + (0xFF & paramInt >> 24);
    }

这里获取到的WIFI的链接ipmac wifi 名称等,也可以根据这些执行添加一些信息
我所知道的游戏里面需要的也就这些方法了,其他的有需要的可以在里面继续添加

然后就是打成包=jar放进unity里面了,
注意:manifest里面必须添加权限,出此之外,我就想不到其他需要补充的了其他的可以直接去看我的另一篇博客,里面是具体打包的方法

如果,哪位大佬有比这更好的方法,更加模块的写法,请务必告知——菜鸟在此多谢!