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里面必须添加权限,出此之外,我就想不到其他需要补充的了其他的可以直接去看我的另一篇博客,里面是具体打包的方法
如果,哪位大佬有比这更好的方法,更加模块的写法,请务必告知——菜鸟在此多谢!