主要参考了这篇文章:

Unity与Android交互方案优化版

链接:https://www.jianshu.com/p/86b275da600e

自己的实现(unity获取内存和温度):

android端:

  1. package com.jing.unity;
  2. import android.app.Activity;
  3. import android.app.ActivityManager;
  4. import android.content.BroadcastReceiver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.IntentFilter;
  8. import android.hardware.Sensor;
  9. import android.hardware.SensorEvent;
  10. import android.hardware.SensorEventListener;
  11. import android.hardware.SensorManager;
  12. import android.os.Debug;
  13. // 当前电池温度
  14. import static android.os.BatteryManager.EXTRA_TEMPERATURE;
  15.  
  16. /**
  17. * Created by Jing on 2018-1-18.
  18. */
  19. public class Unity2Android {
  20.  
  21. /**
  22. * unity项目启动时的的上下文
  23. */
  24. private Activity _unityActivity=null;
  25. private SensorManager mSensorManager = null;
  26. private Sensor mSensor = null;
  27. ActivityManager mActivityManager=null;
  28. private float temperature = 0;
  29. private float memory=0;
  30.  
  31. /**
  32. * 获取unity项目的上下文
  33. *
  34. * @return
  35. */
  36.  
  37. public void Init() {
  38. if (_unityActivity == null) {
  39. try {
  40. Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
  41. Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);
  42. _unityActivity = activity;
  43. } catch (ClassNotFoundException e) {
  44.  
  45. } catch (IllegalAccessException e) {
  46.  
  47. } catch (NoSuchFieldException e) {
  48.  
  49. }
  50. }
  51. mActivityManager = (ActivityManager) _unityActivity.getSystemService(Context.ACTIVITY_SERVICE);
  52. /*获取系统服务(SENSOR_SERVICE)返回一个SensorManager对象*/
  53. mSensorManager = (SensorManager) _unityActivity.getSystemService(Context.SENSOR_SERVICE);
  54. /*通过SensorManager获取相应的(温度传感器)Sensor类型对象*/
  55. mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
  56. if (mSensor != null) {
  57. mSensorManager.registerListener(mSensorEventListener, mSensor
  58. , SensorManager.SENSOR_DELAY_NORMAL);
  59. }
  60. else
  61. {
  62. startBroadCast();
  63. }
  64. }
  65.  
  66. public void Destroy() {
  67. if (mSensor != null) {
  68. mSensorManager.unregisterListener(mSensorEventListener, mSensor);
  69. }
  70. else
  71. {
  72. stopBroadCast();
  73. }
  74. }
  75.  
  76. private void startBroadCast() {
  77. IntentFilter filter = new IntentFilter();
  78. filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  79. _unityActivity.registerReceiver(mBroadcastReceiver, filter);
  80. }
  81.  
  82. private void stopBroadCast() {
  83. _unityActivity.unregisterReceiver(mBroadcastReceiver);
  84. }
  85.  
  86. /*声明一个SensorEventListener对象用于侦听Sensor事件,并重载onSensorChanged方法*/
  87. private final SensorEventListener mSensorEventListener = new SensorEventListener() {
  88.  
  89. @Override
  90. public void onSensorChanged(SensorEvent event) {
  91. if (event.sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
  92. /*温度传感器返回当前的温度,单位是摄氏度(°C)。*/
  93. temperature = event.values[0];
  94. }
  95. }
  96.  
  97. @Override
  98. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  99. // TODO Auto-generated method stub
  100.  
  101. }
  102. };
  103.  
  104. public float GetTemperature() {
  105. return temperature;
  106. }
  107.  
  108. public float GetMemory() {
  109. try {
  110. int pid = android.os.Process.myPid();
  111. Debug.MemoryInfo[] memoryInfoArray = mActivityManager.getProcessMemoryInfo(new int[]{pid});
  112. memory = (float) memoryInfoArray[0].getTotalPss()/ 1024.0f;
  113. } catch (Exception e) {
  114. }
  115. return memory;
  116. }
  117.  
  118. private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
  119.  
  120. @Override
  121. public void onReceive(Context context, Intent intent) {
  122. if (null == intent) {
  123. return;
  124. }
  125. String action = intent.getAction();
  126.  
  127. if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
  128. temperature = intent.getIntExtra(EXTRA_TEMPERATURE, -1)/10.0f;
  129. }
  130. }
  131. };
  132. }

unity端:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class ShowGUI : MonoBehaviour {
  6. private float memory=0;
  7. private float temperature=0;
  8. private AndroidJavaObject jo;
  9. // Use this for initialization
  10. void Start () {
  11. jo = new AndroidJavaObject("com.jing.unity.Unity2Android");
  12. jo.Call("Init");//初始化监听
  13. }
  14.  
  15. float GetMemory()
  16. {
  17. float m=jo.Call<float>("GetMemory");
  18. return m;
  19. }
  20.  
  21. float GetTemperature()
  22. {
  23. float m=jo.Call<float>("GetTemperature");
  24. return m;
  25. }
  26.  
  27. void OnDestroy()
  28. {
  29. jo.Call("Destroy");//结束监听
  30. }
  31.  
  32. void OnGUI()
  33. {
  34. GUIStyle labStyle=new GUIStyle();
  35. labStyle.fontSize=100;
  36. labStyle.normal.textColor=Color.red;
  37.  
  38. if(GUILayout.Button("获取当前值",GUILayout.MaxWidth(200),GUILayout.MaxHeight(100)))
  39. {
  40. memory=GetMemory();
  41. temperature=GetTemperature();
  42. }
  43.  
  44. GUILayout.Label("memory="+memory.ToString(),labStyle);
  45. GUILayout.Label("temperature="+temperature.ToString(),labStyle);
  46.  
  47. }
  48. }

值得注意的一点,导出的arr包得改一下sdk的 min version和target version,与unity统一,不然会报错。

如果想导出jar包,打开该类库下的build.gradle,在dependencies后添加以下代码

  1. task makeJar(type:Copy) {
  2. delete 'build/outputs/test.jar'
  3. from('build/intermediates/intermediate-jars/release/')//jar文件来源,这个吧我坑的,早期版本是'build/intermediates/bundles/release/'
  4. into('build/libs/') //生成路径
  5. include('classes.jar')
  6. rename('classes.jar','test.jar') //命名为test.jar
  7. }
  8.  
  9. makeJar.dependsOn(build)

然后View-ToolWindow-Gradle,点左上同步,然后拉到other->makeJar即可

Unity与Android交互实现的更多相关文章

  1. [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  2. Unity3D游戏开发之Unity与Android交互调用研究

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...

  3. Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

    刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity ...

  4. Unity和Android交互学习

    这段时间学习Unity和Android互调,从基础开始. 网上的教程有很多,浏览了一圈教程,发现目前有两种方式:一种是直接把 .aar文件导入Unity/Plugins/Android文件夹,另一种是 ...

  5. unity与Android交互

    unity打包成安卓工程中的JAVA代码 public class UnityPlayerActivity extends Activity { //Unity中调用此函数 public int Ma ...

  6. Unity 和android 交互 记录

    参考文章 http://www.jianshu.com/p/c06063a403c6 趟坑如下 icon 冲突问题: 设置不了unity icon,显示的是默认的 android 小人 解决方法: 在 ...

  7. 最新Unity 与Android 交互通信(基于Unity 2019.4 和 Android Studio 4.1.1)

    原文章链接:https://blog.csdn.net/woshihaizeiwang/article/details/115395519 CLSays:网上找了一圈,真的是很多都不能用,要么太老,要 ...

  8. unity与android交互总结

    http://www.jianshu.com/p/4739ce2f4cd1 http://www.cnblogs.com/suoluo/p/5443889.html http://www.th7.cn ...

  9. 推荐两篇Unity与Android交互的文章

    http://www.xuanyusong.com/archives/676 里面18,19介绍

随机推荐

  1. insert语句太长,有StringBuilder优化一下

    private void btnSave_Click(object sender, RoutedEventArgs e) { if (IsInsert) { //假设日历控件没有选日期,那帮它赋一个当 ...

  2. solr copyfield字段使用实践

    1.使用场景 比如我们现在有一个文档,有title.author.area.keyword.link等字段.现在要把这个文档索引到 solr中,为了方便对author.area.keyword进行搜索 ...

  3. docker实战——构建Jekyll

    构建第一个应用 要构建的第一个应用是Jekyll框架的自定义网站.我们会构建一下两个镜像. 一个镜像安装Jekyll以及其他用于构建Jekyll网站的必要的软件包. 一个镜像通过Apache来让Jek ...

  4. Java类集-set

    Set接口是Collection接口的子接口,Set接口中不能插入反复元素 Set接口的经常使用子类: HashSet是set接口的一个子类.特点:里面不能存放反复元素,并且採用散列的存储方式.所以没 ...

  5. 手机号码月消费档次API

    手机号码月消费档次API,返回手机号的每月消费水平,身份证姓名不做一致性校验 文档:https://www.juhe.cn/docs/api/id/261 接口地址:http://v.juhe.cn/ ...

  6. SSH——基于datagrid实现分页查询

    1. 修改页面中datagrid的URL地址,访问action // 取派员信息表格 $('#grid').datagrid( { iconCls : 'icon-forward', fit : tr ...

  7. SHOW CREATE DATABASE Syntax

    SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name Shows the CREATE DATABASE statement that cre ...

  8. SqlServer+Topshelf+Quartznet做集群,定时任务分布式处理

    接触Quartznet之前,老东家用的是总监自己写的分布式任务框架,好用但是配置麻烦,unity,一个微软容器,配置节点错一个,整个使用到unity文件的项目全部跑不起来,这后果真的受不了... 目前 ...

  9. js使用ctrl+s保存表单提升用户体验

    本质上是监控ctrl+s 然后触发相应事件 <script language="JavaScript"> //Ctrl+s保存 document.onkeydown=f ...

  10. olede读excel

    注意点:需要比较excel文件中是否有重复列时,需要设置HDR=No,IMEX=1,即把第一列当做数据读取,不然读到的datatable列名会被自动加数字后缀. /// < summary> ...