主要参考了这篇文章:

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即可

最新文章

  1. Linux日志定时清理
  2. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)
  3. 微型orm fluentdata
  4. 字节流和字符流(PrintStream类和PrintWiter类)
  5. mq安装参考
  6. http UserAgent
  7. MAC如何直接管理安卓手机文件(转)
  8. Entity Framework with MySQL 学习笔记一(查询)
  9. 十一招解决:系统IE部分网页打不开怎么办(转载)
  10. 前端project师,确定你的目标吧!无能的人才管他叫命运
  11. (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL数据库管理
  12. MongoDB入门学习笔记之简介与安装配置
  13. 浅析Springboot自动配置
  14. MongoDB 高可用集群副本集+分片搭建
  15. Java API使用
  16. [转]如何在Angular4中引入jquery
  17. Nand flash 三种类型SLC,MLC,TLC【转】
  18. jQuery实现淘宝购物车小组件
  19. 实现php的startsWith和endsWith
  20. 【CSAPP笔记】11. 存储器层次结构

热门文章

  1. Oracle中读取数据一些原理研究
  2. MVC架构、WebForm与MVC对比
  3. [Python爬虫] 之十七:Selenium +phantomjs 利用 pyquery抓取梅花网数据
  4. [C++]豆知识(1条)
  5. Spark streaming + Kafka 流式数据处理,结果存储至MongoDB、Solr、Neo4j(自用)
  6. kafka启动报错:kafka.common.KafkaException: Failed to acquire lock on file .lock
  7. Elasticsearch 理解
  8. C++ 字符串分割函数 str_split
  9. Unity AssetBundle 踩坑记录
  10. ROS示例----导航功能包Husky_exploration