欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-03 08:56:52
...

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里面必须添加权限,出此之外,我就想不到其他需要补充的了其他的可以直接去看我的另一篇博客,里面是具体打包的方法

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