主要参考了这篇文章:

Unity与Android交互方案优化版

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

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

android端:

 package com.jing.unity;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Debug;
// 当前电池温度
import static android.os.BatteryManager.EXTRA_TEMPERATURE; /**
* Created by Jing on 2018-1-18.
*/
public class Unity2Android { /**
* unity项目启动时的的上下文
*/
private Activity _unityActivity=null;
private SensorManager mSensorManager = null;
private Sensor mSensor = null;
ActivityManager mActivityManager=null;
private float temperature = 0;
private float memory=0; /**
* 获取unity项目的上下文
*
* @return
*/ public void Init() {
if (_unityActivity == null) {
try {
Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);
_unityActivity = activity;
} catch (ClassNotFoundException e) { } catch (IllegalAccessException e) { } catch (NoSuchFieldException e) { }
}
mActivityManager = (ActivityManager) _unityActivity.getSystemService(Context.ACTIVITY_SERVICE);
/*获取系统服务(SENSOR_SERVICE)返回一个SensorManager对象*/
mSensorManager = (SensorManager) _unityActivity.getSystemService(Context.SENSOR_SERVICE);
/*通过SensorManager获取相应的(温度传感器)Sensor类型对象*/
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
if (mSensor != null) {
mSensorManager.registerListener(mSensorEventListener, mSensor
, SensorManager.SENSOR_DELAY_NORMAL);
}
else
{
startBroadCast();
}
} public void Destroy() {
if (mSensor != null) {
mSensorManager.unregisterListener(mSensorEventListener, mSensor);
}
else
{
stopBroadCast();
}
} private void startBroadCast() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
_unityActivity.registerReceiver(mBroadcastReceiver, filter);
} private void stopBroadCast() {
_unityActivity.unregisterReceiver(mBroadcastReceiver);
} /*声明一个SensorEventListener对象用于侦听Sensor事件,并重载onSensorChanged方法*/
private final SensorEventListener mSensorEventListener = new SensorEventListener() { @Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
/*温度传感器返回当前的温度,单位是摄氏度(°C)。*/
temperature = event.values[0];
}
} @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub }
}; public float GetTemperature() {
return temperature;
} public float GetMemory() {
try {
int pid = android.os.Process.myPid();
Debug.MemoryInfo[] memoryInfoArray = mActivityManager.getProcessMemoryInfo(new int[]{pid});
memory = (float) memoryInfoArray[0].getTotalPss()/ 1024.0f;
} catch (Exception e) {
}
return memory;
} private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
if (null == intent) {
return;
}
String action = intent.getAction(); if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
temperature = intent.getIntExtra(EXTRA_TEMPERATURE, -1)/10.0f;
}
}
};
}

unity端:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class ShowGUI : MonoBehaviour {
private float memory=0;
private float temperature=0;
private AndroidJavaObject jo;
// Use this for initialization
void Start () {
jo = new AndroidJavaObject("com.jing.unity.Unity2Android");
jo.Call("Init");//初始化监听
} float GetMemory()
{
float m=jo.Call<float>("GetMemory");
return m;
} float GetTemperature()
{
float m=jo.Call<float>("GetTemperature");
return m;
} void OnDestroy()
{
jo.Call("Destroy");//结束监听
} void OnGUI()
{
GUIStyle labStyle=new GUIStyle();
labStyle.fontSize=100;
labStyle.normal.textColor=Color.red; if(GUILayout.Button("获取当前值",GUILayout.MaxWidth(200),GUILayout.MaxHeight(100)))
{
memory=GetMemory();
temperature=GetTemperature();
} GUILayout.Label("memory="+memory.ToString(),labStyle);
GUILayout.Label("temperature="+temperature.ToString(),labStyle); }
}

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

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

task makeJar(type:Copy) {
delete 'build/outputs/test.jar'
from('build/intermediates/intermediate-jars/release/')//jar文件来源,这个吧我坑的,早期版本是'build/intermediates/bundles/release/'
into('build/libs/') //生成路径
include('classes.jar')
rename('classes.jar','test.jar') //命名为test.jar
} 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. vue-resource基本使用方法

    一.vue-resource特点 1.体积小:vue-resource非常小巧,在压缩以后只有大约12KB,服务端启用gzip压缩后只有4.5KB大小,这远比jQuery的体积要小得多. 2.支持主流 ...

  2. Vue组件基础知识总结

    组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树. 那么什么是组件呢?组件可以扩展HTML元素,封装 ...

  3. Excel 对应.xml/.ftl 配置(中爆导出范文)

    <?xml version="1.0"?><Workbook xmlns="urn:schemas-microsoft-com:office:sprea ...

  4. React的设计哲学 - 简单之美

    React最初来自Facebook内部的广告系统项目,项目实施过程中前端开发遇到了巨大挑战,代码变得越来越臃肿且混乱不堪,难以维护.于是痛定思痛,他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的 ...

  5. Python 3 初探,第 1 部分: Python 3 的新特性

    Python 3 是 Guido van Rossum 功能强大的通用编程语言的最新版本.它虽然打破了与 2.x 版本的向后兼容性,但却清理了某些语法方面的问题.本文是系列文章中的第一篇,介绍了影响该 ...

  6. DB2日期与时间

    摘选自:http://www.cnblogs.com/wanghonghu/archive/2012/05/25/2518604.html 1.db2可以通过SYSIBM.SYSDUMMY1.SYSI ...

  7. 用.net installshield打包程序时注册第三方控件

    制作打包程序时如果用到外部控件需要按以下方式操作: 1.将控件及控件所用到的所有DLL加入打包程序. 2.将控件的Register由vsdrfDoNotRegister改为vsdrfCOMSelfRe ...

  8. Android 自己定义控件开发入门(二)

    上一次我们讲了一堆实现自己定义控件的理论基础.列举了View类一些能够重写的方法,我们对这些方法的重写是我们继承View类来派生自己定义控件的关键 我通过一个最简单的样例给大家展示了这一个过程,不管是 ...

  9. 【MyBatis学习09】高级映射之一对多查询

    上一篇博文总结了一下一对一的映射,本文主要总结一下一对多的映射,从上一篇文章中的映射关系图中可知,订单项和订单明细是一对多的关系,所以本文主要来查询订单表,然后关联订单明细表,这样就有一对多的问题出来 ...

  10. spring揭秘读书笔记----ioc的基本概念

    在看ico概念之前,先想一下我们平常需要依赖某个类时会怎么做? 无非是在要用到的地方写如下代码: Person person = new Person(); //然后就可以用person对象来获取Pe ...