Ich brauche den Benutzer über bestimmte Ereignisse aufmerksam zu machen durch: sollteWie der Vibrator von einem Dienst oder Empfänger auf unbestimmte Zeit halten
- Vibration
- Mitteilung
Die Vibration auf bleiben unbegrenzt, bis der Benutzer die Benachrichtigung bestätigt.
Das Problem ist, dass die Vibration stoppt, wenn das Gerät in den Ruhezustand wechselt. Ich habe folgende Fragen lauten:
Allow phone to vibrate when screen turns off
Continue vibration even after the screen goes to sleep mode in Android
Es an answer zu einem der oben genannten Fragen war zu sagen, dass es ohne Muster Vibrieren den Trick. Also habe ich versucht, die Version Vibrator.vibrate
aufzurufen, die Millisekunden anstelle eines Musters mit einer großen Zahl akzeptiert, aber die Vibration stoppt trotzdem.
Andere Antworten schlagen vor, einen Empfänger auf der ACTION_SCREEN_OFF
Aktion zu registrieren. Dies würde es mir ermöglichen, die Vibration fortzusetzen, wenn das Gerät nach dem Start des Alarms in den Ruhezustand geht, aber nicht funktioniert, wenn das Gerät bereits geschlafen hat.
Ich könnte jedoch die Sache funktionierte, wenn ich in der Lage wäre, den Bildschirm zuerst einzuschalten, dann registrieren Sie den Empfänger, um sich mit jedem Bildschirm-Aus-Ereignis zu befassen, das von dort weiter passieren könnte. Also habe ich versucht, eine vollständige Wecksperre zu erhalten, wenn das auslösende Ereignis empfangen wird, bevor Sound oder Vibration gestartet wird, aber es funktioniert nicht, obwohl ich die Flags FULL_WAKE_LOCK und ACQUIRE_CAUSES_WAKEUP verwende. Der Weckteil funktioniert, aber bald darauf geht das Gerät wieder in den Ruhezustand. Ich würde gerne glauben, dass das Flag FULL_WAKE_LOCK nicht funktioniert, weil es in API 17 veraltet ist, aber mein Gerät ist ein Samsung mit 4.1.2, das API 16 ist!
Der empfohlene Ansatz scheint jetzt WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON zu verwenden, aber dies sollte von einer Aktivität aufgerufen werden, und ich habe keine Bildschirm, bis der Benutzer in der Benachrichtigung klickt, und wenn dies passiert, sollte der Sound und die Vibration bereits haben wurde gestoppt.
So sieht es aus wie eine Sackgasse.
Was könnte ich noch versuchen?
UPDATE:
Ich hatte kein Glück, den Bildschirm immer mit Wake Locks zu halten, aber auf der anderen Seite erlauben sie mir, den Bildschirm einzuschalten, wenn auch nur für ein paar Sekunden. Ich muss den Bildschirm eigentlich nicht einschalten, also registriere ich den Empfänger auf der Intent.ACTION_SCREEN_OFF
Aktion, und wenn der Bildschirm ausgeht, nimmt der Empfänger die Vibration wieder auf. Das hat im Samsung gut funktioniert, aber ich bin jetzt auf ein Huawei umgestiegen, um weiter zu testen und der Receiver funktioniert nicht.
UPDATE:
Hier ist der Stack-Trace der Ausnahme in dem Huawei-Gerät:
java.util.NoSuchElementException: Death link does not exist
at android.os.BinderProxy.unlinkToDeath(Native Method)
at com.android.server.VibratorService.unlinkVibration(VibratorService.java:294)
at com.android.server.VibratorService.removeVibrationLocked(VibratorService.java:284)
at com.android.server.VibratorService.cancelVibrate(VibratorService.java:213)
at android.os.IVibratorService$Stub.onTransact(IVibratorService.java:83)
at android.os.Binder.execTransact(Binder.java:338)
at dalvik.system.NativeStart.run(Native Method)
Das sind eigentlich meine Flags, außer dem 'ON_AFTER_RELEASE', das ich nicht brauche. Und was passiert in diesem Samsung ist, dass es tatsächlich anschaltet, aber nach 1 oder 2 Sekunden geht es wieder ohne dass ich das Schloss freigegeben habe. Das ist jetzt egal, da ich den Bildschirm nicht ständig brauche. Ich werde eine Antwort schreiben und erklären, was ich getan habe. –
ok, ich freue mich auf deine Antwort, ich bin gespannt darauf. – Nexowski
habe es gerade gepostet. –