1

私はアンドロイドが初めてで、これが私の最初のアプリです。

アプリを作成しましたが、すべて正常に動作し、アラームがトリガーされます。署名付きリリースを作成してインストールした後、アラームが機能しません:(。

これは、受信機を登録するための私のアラームです:

public void enable(){
    if(enabled == true) return;
    IntentFilter filter = new IntentFilter();
    filter.addAction(INTENT);
    mContext.registerReceiver(this, filter);
    enabled = true;
}

次に、アラームを設定します。

private void setAlarm(Long interval){
    Intent startIntent = new Intent(INTENT);
    mPendingIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
    AlarmManager alarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 60000, 60000, mPendingIntent);
}

最初に enable を呼び出し、次に setAlarm を呼び出します。

非リリースではすべて正常に動作しています。手動で登録しているため、受信者をマニフェストに入れていません。アラーム設定メソッドが呼び出されています。テストするために乾杯したので、これは確かです。ただし、ブロードキャストを受信することはありません。

4

1 に答える 1

0

さて、私は問題を見つけました。

これはライブ壁紙なので、エンジンは 2 回呼び出されます。1 回はプレビュー用、もう 1 回は設定した実際の壁紙用です。

イベントの順序によって、アラームが機能するかどうかが決まります。論文が作成された後にプレビューが破棄されると、インテントが一致するため、すべてのアラームがオフになることがわかりました??

AlarmManager alarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(mPendingIntent);

したがって、私が行ったことは、プレビューでアラームを登録しないことです-とにかくここでそれらが必要になるのはなぜですか. 私の新しい質問は、プレビューを無効にできなかった場合、これを回避するための最良の方法は何かということです。各論文に固有の意図?

興味深いことに、これがリリース時にのみピックアップされた理由は、テスト中に手動でウォールラッパーを設定するプロセスを実行することはめったになかったため、今までピックアップされなかった.

于 2012-08-22T07:16:50.547 に答える