【Unity3d】获取安卓手机电量和网络状况

1.我的工具:

Unity5.3.4

Android Studio2.3.3




2.准备工作

准备工作——原文连接(点这里)

现在网上的Unity与Android通信的教程,要么是Unity版本不是较新的,要么使用的是Eclipse配置Android。写这篇博文主要是简单说明一下Unity5.3.6和Android Studio2.4的配置,来完成Unity脚本(C#)与Android脚本(Java)的交互通信。PS:以下详细操作截图是本人的真实操作,能考虑到的重点已经说明,如果存在其他问题,大家可以指出,共同进步!

本篇主要讲解搭建Unity与Android交互通信的环境,以及如何在Unity脚本中调用Android工程中的方法。

假设你已经了解了Android Studio创建工程的操作,并且配置好了Android Studio的环境和Unity导出apk的环境,我使用的是Android Studio 2.4版本和Unity5.3.6版本,算是当前最新的版本了。

1、首先将Unity创建一个Android工程,例如我的工程名是:01_Unity_Message,如下是Project视图下的目录。

2、新建库模块——Android工程是由模块组成的,每一个模块可以创建一个应用,切换到Android视图下可以看到每一个模块。因为Unity与Android通信主要是调用了各自的方法,因此在Android工程中我们可以单独新建一个模块作为库模块,来负责与Unity的交互内容。

新建模块操作:

点击Finish按钮,然后稍等片刻,就会创建出新的模块,我们作为一个库模块来使用,如下图:

3、将Unity的jar包(class.jar)导入到新建的库模块中,首先说明:

首先找到class.jar文件,它的路径在Unity的安装路径下,例如我的是在:D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes,然后会发现只有一个class.jar文件。

这里注意两点:

(1)、这个路径是新版的Unity下的路径,以前版本的jar文件是在\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Release\下;

(2)、Unity路径下有两个class.jar文件的不同路径,一个是在Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下,另一个是在D:\Program Files (x86)\Unity5.3.6\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes下。Unity中我们使用的是C#脚本,最终运行在Android上是由于Mono进行转换的,所以我们选用的jar文件是第一个路径下的。如果使用的是il2cpp,就要选择第二个路径下的jar文件。

将jar包导入库模块的操作如下:

4、因为新建的库模块中没有MainActivity.java,我们可以理解为启动这个模块的java类,例如在初始的app模块中就有一个MainActivity.java。因此需要新建一个MainActivity.java的文件,并且调用Unity包中的基类,具体操作如下:

点击Finish后,会在库模块的中创建出一个MainActivity的类,如下图:

注意:生成MainActivity类后,会在res/layout下生成一个xml文件:main_layout.xml。这个文件是一个布局文件,

因为我们的库模块是为了跟Unity交互的,不需要界面布局,所以为了防止后面发生错误,这里删除掉这个文件:

注意:要修改AndroidMainfest.xml文件,如下:

然后仿照初始的app模块中的AndroidMainfest.xml文件,将里面的部分复制到库模块的AndroidMainfest.xml的相同位置。如下:

然后需要修改一下MainActivity这个脚本,操作如下:

5、下面就是在Android中编写Unity要调用的方法了,例如我这里只写一个简单的两数求和的方法:

6、Build库模块,然后将生成的配置文件导入到Unity工程中,操作如下:

然后稍等片刻,编译中....

然后在Project视图下,找到编译生成文件的所在目录unity_exchange/build/intermediates/bundles/debug,右键后打开所在文件夹

然后把debug文件夹下的classes.jar文件移动到libs文件夹中,并且把libs文件夹中的class.jar文件替换掉。然后将debug文件夹下的libs文件夹、res文件夹、AndroidManifest.xml文件导入到Unity的Assets/Plugins/Android文件夹下(没有这个文件夹需先创建)。

然后将三个文件移动到Unity的plugins/Android文件夹下。

7、创建Unity的C#脚本,并挂载到MainCanera上。为了在真机测试时能够看到求和的结果,这里我使用的是UGUI的Text来显示结果,同时通过Button的按钮来触发求和方法。如下图。

以下是主要的脚本代码。调用Android中的方法,并将求和结果显示在(Text)界面上。

将脚本挂载到MainCamera上

8、Unity编辑器不能运行与Android相关的操作,所以需要导出apk文件到真机上测试。

注意:导出前要修改PlayerSettings相关配置。因为从Android工程中导入了一个AndroidManifest文件,这个文件中有Android工程的相关配置,例如工程名称、工程的包名、最低SDK版本、执行的Activity等等。因此我们要在Unity导出apk前修改一些相关配置,主要修改的是包名,如下图:

最后是导出apk包到手机上或虚拟机上测试即可。我的测试截图如下:

特别提醒:如果使用Android工程中初始的app模块来与Unity交互,需要修改部分配置。build.gradle文件中,将applicationId删除,然后将apply plugin后面的内容修改为"com.android.library"。如下图:

不建议大家使用初始的app模块,而是新建一个专门作为交互的Library模块。

作者:壹米玖坤

链接:https://www.jianshu.com/p/c06063a403c6

下方内容参考连接

3.现在该上代码了

修改MainActivity.java-----------------------------------------------------------------------------------------------------------------


如果只是这样  有报错哦   所以要添加权限

修改 

C# 脚本代码

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class Test : MonoBehaviour

{

    public Button button;

    public Text phonePowerText;

    public Text wifiText;

    private string batteryData;

    private string wifiData;

    void Awake()

    {

        button.onClick.AddListener(OnButtonClicked);

    }

    private void OnButtonClicked()

    {

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        batteryData = jo.Call<string>("MonitorBatteryState");

        wifiData = jo.Call<string>("ObtainWifiInfo");

        OnBatteryDataBack(batteryData);

        OnWifiDataBack(wifiData);

    }

    //安卓那边将数据以“|”进行分割,所以这边以"|"来分割数据

    private void OnBatteryDataBack(string data)

    {

        phonePowerText.text = "";

        string[] args = data.Split('|');

        if (args[2] == "2")

        {

            phonePowerText.text += "电池充电中\n";

        }

        else

        {

            phonePowerText.text += "电池放电中\n";

        }

        int curPower = int.Parse(args[0]);

        float power = float.Parse(args[1]);

        float percent = curPower / power;

        phonePowerText.text += " cur power:" + curPower;

        phonePowerText.text += "  all power:" + power;

        phonePowerText.text += " 电量比例:" + (Mathf.CeilToInt(percent * 100) + "%").ToString();

    }

    private void OnWifiDataBack(string data)

    {

        wifiText.text = "";

        wifiText.text += wifiData;

        string[] args = wifiData.Split('|');

        int wifiLevel = int.Parse(args[0]);

        wifiText.text += "Wifi信号格数:" + wifiLevel.ToString() + "\n";

        string ip = "IP:" + args[1] + "\n";

        string mac = "MAC:" + args[2] + "\n";

        string ssid = "Wifi Name:" + args[3] + "\n";

        wifiText.text += ip;

        wifiText.text += mac;

        wifiText.text += ssid;

    }

}

--------------------- 

原文:https://blog.csdn.net/qq_26999509/article/details/78444163

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,689评论 0 3
  • 今天16度,南莣只穿了一件卫衣就出去了,冬日的阳光照耀着每一处,温暖而又满足,她走到码头,手里拿着一杯红糖水...
    无味诗人阅读 217评论 0 0
  • 1.概述 上一篇博客已经简单的讲了一下Fragment的使用并写了一个基本的实例,接下来就将其整合到项目中。附视频...
    红橙Darren阅读 3,474评论 5 11
  • “惜” 灰暗的天空,阴雨绵绵,心情却像是阴暗潮湿的地下室,能想到未来,也能想到过去,一步一步还是将自己...
    稳场宜宾强阅读 236评论 0 0