2

だから私はBroadcastReceiverこのように見えるものを持っています:

public class UpdateReceiver extends BroadcastReceiver {

    public UpdateReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);
        System.out.println("Broadcast received");       

        PendingIntent operation = PendingIntent.getService(context, 0,new Intent("REFRESH_THAT"), PendingIntent.FLAG_UPDATE_CURRENT);       
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), cal.getTimeInMillis(), operation);
    }
}

これは私が呼ぶ方法ですBroadcastReceiver

 Intent in = new Intent ("REFRESH_BROADCAST");       
 sendBroadcast(in);

そしてこれはAndroidManifestファイルの私のインテントフィルターです

<service android:name = ".services.RefreshService">     
    <intent-filter>
        <action android:name="REFRESH_THAT"/>
    </intent-filter>
</service>

<receiver android:name=".services.UpdateReceiver">        
    <intent-filter>
        <action android:name="REFRESH_BROADCAST"/>        
    </intent-filter>    
</receiver>

BroadcastReceiver問題なくブロドキャストを受信しましたが、AlarmManager何もしないようです。私がそれを問題なく動作すると呼ぶならばoperation.send()、私は何かが間違っていると思いAlarmManagerます。

4

2 に答える 2

3

さて、ついに私は解決策を見つけました。それは私のせいでした。

プロパティが間違っていると に設定int typeしましたが、ペアにすることしかできません。AlarmManager.ELAPSED_REALTIMElong triggerAtMillisSystem.currentTimeMillis()alarmManager.setInexactRepeating(.....)AlarmManager.RTC / RTC_WAKEUP

したがって、関数型コードは次のとおりです。

PendingIntent operation = PendingIntent.getService(context, 0,new Intent("REFRESH_THAT"), 0);       
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() , 30000, operation);

APIドキュメントをもっと注意深く読む必要があります。ホバーAlarmManager.ELAPSED_REALTIMEすると、どのような時間トリガーを使用する必要があるかが表示されます。これが私の愚かな間違いが将来誰かを助けることを願っています。

于 2012-11-20T16:33:40.770 に答える
0

ドキュメントによるsetInexactRepeatingと、3番目のパラメータは次のとおりです。

intervalMillis:アラームの後続の繰り返し間のミリ秒単位の間隔

次に、10000代わりにms(10秒)を入力する必要がありますcal.getTimeInMillis()

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, cal.currentTimeMillis(), 10000, operation);

つまり、意図的な発砲から10秒後にアラームが鳴り、10秒ごとに繰り返されます。そしてもちろん、この方法を使用しているので、これは不正確なタイミングです。

于 2012-11-20T13:32:11.020 に答える