私は、時間が経過したときに通知を表示してから再開するタイマーである Android Wear アプリに取り組んでいます。通知は時計にメッセージを表示し、デバイスを振動させます。
時計がスリープモードになっている場合を除いて、アプリは正常に動作しています。この場合、時計が振動してタイマーが再び開始されるようにするには、ユーザーは画面に触れる必要があります。
通知は、WearableListenerService から作成および表示されます。Wake locks などの多くのソリューションを試しました。コードは Xamarin.Android を使用して C# で記述されていますが、どの Java 開発者も読み取ることができると思います。
static PowerManager.WakeLock sWakeLock;
static object LOCK = new object();
void DisplayNotification()
{
//create the wake lock
lock (LOCK)
{
if (sWakeLock == null)
{
// This is called from BroadcastReceiver, there is no init.
var pm = (PowerManager)GetSystemService(Context.PowerService));
sWakeLock = pm.NewWakeLock(
WakeLockFlags.ScreenBright | WakeLockFlags.Full | WakeLockFlags.AcquireCausesWakeup, "My WakeLock Tag");
}
}
sWakeLock.Acquire();
//display the notification
//....
//release the wake lock
lock (LOCK)
{
//Sanity check for null as this is a public method
if (sWakeLock != null)
sWakeLock.Release();
}
}
私の問題は、時計がある時点 (数分後) で起動しますが、要求されてもすぐには起動しないことです。ウェイクロックの解除を遅らせたり、 sWakeLock.Acquire(2000)
2秒後に自動的にウェイクロックが解除されるようにしたりしてみました。次に、 と を使用して他のソリューションも試しWakefulBroadcastReceiver
ましたAlarmManager
が、それでも同じ動作をしています。