W mojej aplikacji, w metodzie onCreate() głównego działania tworzę blokadę wybudzania, aby procesor działał dalej, jeśli telefon będzie działał standb/screen wyłączy się.Android - blokada budzenia nie jest poprawnie pobierana, aplikacja musi działać w trybie gotowości
Również w metodzie onCreate mam zamiar stworzyć usługę korzystającą z akcelerometru. Ta usługa musi być ciągle uruchomiona, gdy aplikacja jest otwarta i monitorować wartości akcelerometru (wiem, że to nie jest dobre dla baterii, ale potrzebuję jej do tego). Oto mój kod w tej chwili i usługa zaczyna się dobrze.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Howaya");
wl.acquire();
if (appStart == true)
{
Intent AccelService = new Intent(this, Accelerometer.class);
AccelService.putExtra("unreg", false);
startService(AccelService);
}
appStart = false;
}
Mam następujące uprawnienia ustawione w moim manifestu -
<uses-permission android:name="android.permission.WAKE_LOCK" />
próbowałem to z różnymi zamkami - wym ekranu i pełnej jasności bezskutecznie też. Moje wyjście na LogCat jest tutaj -
F/PowerManager(15628): android.util.Log$TerribleFailure: WakeLock finalized while still held: Howaya
F/PowerManager(15628): at android.util.Log.wtf(Log.java:260)
F/PowerManager(15628): at android.util.Log.wtf(Log.java:239)
F/PowerManager(15628): at android.os.PowerManager$WakeLock.finalize(PowerManager.java:329)
F/PowerManager(15628): at dalvik.system.NativeStart.run(Native Method)
Widziałem ludzi, którzy mówią, że częściowe wakelocks nie działają tak jak powinny to zrobić, jak ten link Google standby error page ale ten został wydany w ubiegłym roku i zamknięty więc nie wiem Czy to możliwe, czy ktoś może tu pomóc? Mam HTC Desire w odniesieniu do tego ostatniego punktu, dzięki.
OK przepraszam, jeśli byłem niejasny i dziękuję za odpowiedź. Moje pytanie brzmiało: w jaki sposób mogę uruchomić funkcję wakelock na moim telefonie, aby moja aplikacja działała, gdy ekran jest nadal wyłączony, ponieważ kod, którego używam powyżej, nie działa. Wolałbym nie mieć ekranu, żeby nie marnował tyle baterii i nie musiał używać widżetu, na wypadek, gdyby zdecydowałem się umieścić go na rynku (wtedy inni użytkownicy musieliby użyć widżetu) – bobby123
@ bobby123 : Działanie nie może logicznie potrzebować częściowego 'WakeLock'. Usługa * może wymagać częściowego WakeLock, ale nie działania, którego jedynym celem jest wyświetlanie rzeczy na ekranie. Tak więc albo wyrzuć 'WakeLock' z działania i do usługi (dopasuj logikę biznesową do dopasowania), albo użyj' android: keepScreenOn'. Zdobądź 'WakeLock' w' onCreate() 'swojej usługi i zwolnij go w' onDestroy() '. Użyj 'startForeground()', aby twoja usługa nie była nuked i dać użytkownikowi łatwy sposób, aby dostać się do działania, aby zatrzymać usługę. – CommonsWare
To właśnie chciałem wiedzieć, dzięki. Przeniosę blokadę wake'a do serwisu, bo tego naprawdę potrzebuję. Mam przycisk menu, aby użytkownik mógł zakończyć usługę w dowolnym momencie. Jeszcze jedno pytanie, czy wiesz, czy metoda onSensorChanged() dla akcelerometru nadal działa, gdy jest pod częściową blokadą wybudzania, czy jest to nadal problem z Google? – bobby123