参考链接:Android Studio打包arr包并导入Unity中
参考链接:Unity中调用Android方法
轮询获取当前网速,每2s更新一次:
Android UseForUnity.java代码:
package com.android.util;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
public class UseForUnity {
private NetSpeedTimer mNetSpeedTimer;
private String mNetSpeed;
/// 设置一个 Activity 参数
private static Activity _unityActivity;
// 通过反射获取 Unity 的 Activity 的上下文
public static Activity getActivity() {
if (null == _unityActivity) {
try {
Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);
_unityActivity = activity;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
return _unityActivity;
}
// 开始轮询网速
// 1s后启动任务,每2s更新一次
public void StartNetSpeed() {
//创建NetSpeedTimer实例
mNetSpeedTimer = new NetSpeedTimer(getActivity(), new NetSpeed(), mHandler).setDelayTime(1000).setPeriodTime(2000);
//在想要开始执行的地方调用该段代码
mNetSpeedTimer.startSpeedTimer();
}
// 获得网速
public String GetNetSpeed() {
return mNetSpeed;
}
// 关闭轮询网速
public void CloseNetSpeed() {
if (null != mNetSpeedTimer) {
mNetSpeedTimer.stopSpeedTimer();
}
}
private Handler mHandler = new Handler() {
private static final String TAG = "UnitTest";
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == NetSpeedTimer.NET_SPEED_TIMER_DEFAULT) {
mNetSpeed = (String) msg.obj;
// Log.i(TAG, "current net speed = " + mNetSpeed);
}
}
};
}
Android NetSpeed.java代码:
package com.android.util;
import android.net.TrafficStats;
import android.util.Log;
/**
* <p>
* <code>lastTotalRxBytes = getTotalRxBytes();<br>
* lastTimeStamp = System.currentTimeMillis();<br>
* new Timer().schedule(task, 1000, 2000); // 1s后启动任务,每2s执行一次<br>
* TimerTask task = new TimerTask();
*/
public class NetSpeed {
private static final String TAG = NetSpeed.class.getSimpleName();
private long lastTotalRxBytes = 0;
private long lastTimeStamp = 0;
public String getNetSpeed(int uid) {
long nowTotalRxBytes = getTotalRxBytes(uid);
Log.i(TAG, "nowTotalRxBytes = " + nowTotalRxBytes);
long nowTimeStamp = System.currentTimeMillis();
long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
return String.valueOf(speed) + " kb/s";
}
//getApplicationInfo().uid
public long getTotalRxBytes(int uid) {
return TrafficStats.getTotalRxBytes() == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);//转为KB
}
}










网友评论