タイマーが欲しかったのですが、デバイスがスリープ状態になると機能しないことがわかりました。使用していましAlarmManager
たが、うまくいきません。私もまだ役に立たなかったサービスを試しました。それから私はで試しWakeLock
ましたpartial_wake_lock
。最初はうまくいきましたが、PowerManager または WakeLock に関連するコードを変更せずに突然失敗しました。これで、約 1.5 分間動作します。
コードは次のとおりです。
private void acquireWakeLock(){
PowerManager pm=(PowerManager)getSystemService(Context.POWER_SERVICE);
wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName());
wl.acquire();
}
private void releaseWakeLock(){
if(wl!=null&&wl.isHeld()){
wl.release();
wl=null;
}
}
ご覧のとおり、特別なことは何もありません。そして、基本的に私は次のようにしました:
//private members,including a wakelock,a handler and a runnable, etc
onCreate{
acquireWakeLock();
init();
handler.postdelayed(runnable,time);
}
//some functions...
a function //called in runnable, which does all work before finish() and it calls releaseWakeLock()
アクティビティの で取得する関数を呼び出し、onCreate
すべての作業が完了したら解放しました。デバッグすると、ロックが既に保持されていることがわかりますが、プラグインされていない場合、1.5 分後には何も機能しません。
どうすればそれを機能させることができますか、またはこの愚かなウェイクロックの代わりにうまく機能する解決策はありますか? ------更新----- 必要なすべてのアクセス許可を取得しました。前述したように、取得関数を呼び出した後、WakeLock は既に保持されており、Watch で確認できます。