这是未经测试的,但你可以试试这个,
基本上你想尝试直接访问 Android SDK,Unity 有一些类允许你这样做。
尝试编写一个外部 Java 类并将其放在 Plugins/Android 文件夹中。
Java 类方法可能是这样的:从这个问题引用
确保将其编译为 .jar 文件
package com.yourcompany.yourgamename;
import com.unity3d.player.UnityPlayerActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Config;
import android.util.Log;
import android.app.Activity;
public class MainActivity extends UnityPlayerActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
public static void lockScreen()
{
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.reenableKeyguard();
}
}
还要确保它在 Android Manifest 文件中,以便 Unity 加载此活动而不是主要活动并将其放在 \Plugins\Android 文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
然后创建一个调用外部 Java 类的 Unity C# 脚本:在此处引用
public static void InvokeAndroidLockScreen()
{
#if UNITY_ANDROID
using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
obj_Activity .CallStatic("lockScreen");
}
}
#else
Debug.LogWarning("Cant invoke lockscreen on a non Android Device");
#endif
}
然后最后在一个活动的单一行为中调用应用程序暂停事件上的锁屏:在此处引用
void OnApplicationPause(bool pauseStatus)
{
InvokeAndroidLockScreen();
}
您必须确保将以下标志设置为 false
Application.runInBackground = false;
我会认为,否则设备关闭时不会触发暂停事件。(默认关闭)
即使这是一种解决方法,我仍然认为这是一个应该向他们报告的 Unity Bug。