2

私は、Android 2.1で、(ジェイルブレイクされた)Nook Simple Touch(別名NST)で実行する簡単な目覚まし時計スタイルのアプリケーションを作成しました。

予定された目覚まし時刻になると、アプリケーションはNSTを起動し、HTMLコンテンツのページを表示する必要があります。私はAlarmManagerを使用して適切なタイミングでコールバックを取得しましたが、期待どおりに機能しているようです-ほぼ。

この問題は、NSTがロック画面モードをアクティブにするのに十分なアイドル時間が経過したときに発生します(つまり、有名な作家の似顔絵が自動表示されます)。HTMLコンテンツが表示されるように、ロック画面を閉じるプログラム的な方法が見つかりません。アラームコールバックルーチンが期待どおりに実行されたことがわかります(EclipseのLogCatビューを介して、adbでNSTに再接続した後)。指で手動で「ドラッグしてロックを解除」した後、アプリのウィンドウは期待どおりに更新されましたが、ユーザーがデバイスのロックを解除した直後ではなく、アラームイベントが発生したときにテキストを表示する必要があります。(他のStackOverflowの回答に基づいて)以下に示すコードを試しましたが、役に立ちません。

これを行う方法に関するアイデアはありますか?(技術的に機能する解決策の1つは、FLAG_KEEP_SCREEN_ONを常にウィンドウに設定しておくことです。これにより、有名な作成者のロック画面が最初から表示されることはありませんが、NSTがスリープ状態を維持するため、バッテリーがかなり早く消費されます。 、可能であればそれを避けたい)

private void wakeUpTheScreen()
{
    Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
4

1 に答える 1

3

ハ、私は(以前のStackOverflowの回答からさらに助けを借りて)私が間違っていたことを理解しました。

問題は上記のリンクで説明されているとおりです。AlarmManagerがBroadcastReceiverを期待どおりに呼び出していたので、BroadcastReceiverはMessage()をAlarmHandlerに送信しました(私がクリブしていたAlarmの例に示されています)。しかし、NookはonReceive()が戻った直後にスリープに戻ります。つまり、セカンダリハンドラーが呼び出されなかったため、wakeUpTheScreen()メソッドが実行されませんでした。

wakeUpTheScreen()呼び出しを移動して、onReceived()メソッドから直接呼び出されるようにしました。これで、ウェイクアップが期待どおりに機能するようになりました。:^)

于 2012-03-11T03:06:13.490 に答える