먼저 감사합니다 Michaeltaylor3d의 답변 나를 올바른 방향으로 가리키기 위해.
그가 수정했다고 생각하는 문제를 해결하는 방식에는 몇 가지 문제가있었습니다.
첫 번째 문제는 다음과 같습니다 KeyguardManager
화면 잠금에 대한 접근. 이것은 API 버전 8에서 감가 상각되었으며 API 9+에서는 작동하지 않습니다. 새로운 솔루션은 장치 관리자 API를 사용하여 게임에 매우 방해가됩니다.
Eclipse의 UnityPlayer 정의를 살펴보고 Setwakelock (부울)이라는 기능을 찾았지만 비공개입니다.
맞춤형 안드로이드 활동을했습니다. 그것에서 보호 된 UnityPlayer 기능에 액세스합니다 setWakeLock(boolean)
그리고 그것을 onPause
기능.
나는 이것이 이상적이지 않다는 것을 인정하지만 부작용이없는 것으로 보인다. 버그 보고서를 Unity에 제출 했으므로이 작업이 오랫동안 필요하지 않기를 바랍니다.
public class UnityPlayerWithLockscreen extends UnityPlayerNativeActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
//Provides access to the private UnityPlayer.setWakeLock(boolean) method.
public void setWakeLock(boolean useWakelock) {
Method setWakeLockMethod;
//Use Reflection to get the setWakeLock(boolean) method from the UnityPlayer class
setWakeLockMethod = mUnityPlayer.getClass().getDeclaredMethod("setWakeLock");
//Set the method to me accessible
setWakeLockMethod.setAccessible(true);
//Invoke the method with our argument
setWakeLockMethod.invoke(mUnityPlayer, useWakelock);
}
@Override
protected void onPause()
{
super.onPause();
//Force unity to release the wakelock
setWakeLock(false);
}
}
그런 다음이 활동을 AndroidManifest 파일의 주요 활동으로 설정해야합니다.
<?xml version="1.0" encoding="utf-8"?>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".UnityPlayerWithLockscreen"
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>
이 솔루션에는 C# 스크립트 또는 C# <-> Java Interop도 필요하지 않습니다.
다시 말하지만, 이것은 일종의 해킹 솔루션이라는 것을 알고 있지만 부작용이없는 API 레벨에 관계없이 여러 장치에서 작동하는 것 같습니다. 바라건대 이것은 곧 Unity에 의해 고정되어 더 이상 추악한 수정이 필요하지 않을 것입니다.