基于PicoVR Unity SDK实现调用Android系统PowerManager类相关的功能

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包方法——(二、调用类中的方法)实现该功能。

基于PicoVR Unity SDK实现调用Android系统PowerManager类相关的功能_第1张图片

 

直接上代码:

Android Studio中的工程代码

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场景实现各个功能。

Unity工程代码:

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

 

你可能感兴趣的:(Android)