Zuerst würde ich gerne dank Michaeltaylor3ds Antwort dafür, dass ich mich in die richtige Richtung zeigte.
Es gab ein paar Probleme mit der Art und Weise, wie er das Problem löste, von dem ich glaube, dass ich korrigiert habe:
Das erste Problem ist mit dem KeyguardManager
Herangehensweise zum Sperren des Bildschirms. Dies wurde in der API -Version 8 abgeschrieben und funktioniert nicht auf API 9+. Die neue Lösung verwendet die Geräte -Administrator -API, die für ein Spiel sehr aufdringlich erscheint.
Ich habe die UnityPlayer -Definition in Eclipse durchgesehen und eine Funktion namens Setwakelock (boolean) gefunden, sie ist jedoch privat.
Ich habe eine benutzerdefinierte Android -Aktivität gemacht. Darin greife ich auf eine geschützte UnityPlayer -Funktion zu setWakeLock(boolean)
und nennt es in der onPause
Funktion.
Ich gebe zu, dass dies weniger als ideal ist, aber es scheint ohne Nebenwirkungen zu funktionieren. Ich habe einen Fehlerbericht an Unity eingereicht, daher ist diese Arbeit hoffentlich nicht lange erforderlich.
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);
}
}
Dann müssen Sie diese Aktivität als Hauptaktivität in der AndroidManifest -Datei festlegen:
<?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>
Diese Lösung erfordert auch keine C# -Skripte oder C# <--> Java Interop.
Ich weiß auch hier, dass dies eine Art hackige Lösung ist, aber es scheint auf mehreren Geräten zu funktionieren, unabhängig von der API -Ebene ohne Nebenwirkungen. Hoffentlich wird dies bald von Unity behoben und benötigt keine hässliche Lösung mehr.