Unity调用Android的适用的行业中,目前比较火的就是VR行业,本文借助PicoVR Unity SDK调用Android系统中PowerManager类相关的部分功能(关机、重启、设备睡眠、唤醒),需要设备的系统签名。
PicoVR Unity SDK下载连接:https://developer.pico-interactive.com/sdk 版本号:v2.8.4
使用于Pico Goblin,Pico Neo,Pico G2,Pico G2 4K,Pico Neo2,Pico VR Glasses等设备,该文以Pico G2 4K设备系统版本(B96 PUI 3.6.0)为载体。
根据Unity调用Android jar包方法——(二、调用类中的方法)实现该功能。
直接上代码:
public class AndroidPowerManager {
private static final String TAG = "PvrPowerManger";
public void androidShutDown(Context context) {
Log.i(TAG, "androidShutDown");
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
if (pm != null) {
if (Build.VERSION.SDK_INT < 24) {
try {
Method method = pm.getClass().getDeclaredMethod("shutdown", boolean.class, boolean.class);
method.invoke(pm, false, true);
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
@SuppressLint("SoonBlockedPrivateApi")
Method method = pm.getClass().getDeclaredMethod("shutdown", boolean.class, String.class, boolean.class);
method.invoke(pm, false, null, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void androidReBoot(Context context) {
Log.i(TAG, "androidReBoot");
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm != null) {
pm.reboot("");
}
}
public void androidGoToSleep(Context context) {
Log.i(TAG, "androidGoToSleep");
PowerManager powerManager= (PowerManager)context.getSystemService(Context.POWER_SERVICE);
if(powerManager != null) {
try {
powerManager.getClass().getMethod("goToSleep", new Class[]{long.class}).invoke(powerManager, SystemClock.uptimeMillis());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void androidWakeUp(Context context) {
Log.i(TAG, "androidwakeUp");
PowerManager powerManager= (PowerManager)context.getSystemService(Context.POWER_SERVICE);
if(powerManager != null) {
try {
powerManager.getClass().getMethod("wakeUp", new Class[]{long.class}).invoke(powerManager, SystemClock.uptimeMillis());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以上是Android工程中的代码,因为调用的是Android系统中的PowerManager类,所以需要应用获取设备的系统签名。
把以上类用AS打成jar包,为Android2Unity.jar。
创建unity工程带入PicoVR Unity SDK。
将jar包导入unity工程目录中Assets\Plugins\Android。
借助PicoVR Unity SDK中的Pvr_Controller_UI场景实现各个功能。
AndroidManifest.xml中加入权限:
调用jar包方法的代码:
private string packageName = "com.pvrlance.pvrpowermanager.AndroidPowerManager";
public void UnityShutDown()
{
AndroidJavaObject AndroidClass = new AndroidJavaObject(packageName);
AndroidJavaObject ActivityContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
AndroidClass.Call("androidShutDown", ActivityContext);
}
public void UnityReBoot()
{
AndroidJavaObject AndroidClass = new AndroidJavaObject(packageName);
AndroidJavaObject ActivityContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
AndroidClass.Call("androidReBoot", ActivityContext);
}
public void UnityGoToSleep()
{
AndroidJavaObject AndroidClass = new AndroidJavaObject(packageName);
AndroidJavaObject ActivityContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
AndroidClass.Call("androidGoToSleep", ActivityContext);
}
public void UnityWakeUp()
{
AndroidJavaObject AndroidClass = new AndroidJavaObject(packageName);
AndroidJavaObject ActivityContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
AndroidClass.Call("androidWakeUp", ActivityContext);
}
以上是Unity调用jar包的方式。生成apk后,进行系统签名就可以实现响应的功能。
整个工作就完成了unity通过调用Android jar包内的方式实现关机、重启、息屏和亮屏的功能。
以上功能的完整代码下载连接:https://download.csdn.net/download/liyunlong19870123/12187820