2

AlarmManager画面がオフのときにブロードキャストを送信するためにを使用しています。これはほとんどのデバイスで問題なく動作しますが、一部のデバイス (Samsung Galaxy S4 など) では、ブロードキャストが受信されるまで、指定された 20 秒ではなく、30 秒、40 秒、または 120 秒かかることもあります。これが発生しているデバイスにアクセスできないため、logcat を確認できません。

これは私が設定している方法ですAlarmManager

AlarmManager mAlarmManager=(AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
long mInterval = 20 * 1000;
Intent i = new  Intent();
i.setAction(MY_ACTION);
mPendingIntent = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + mInterval, mPendingIntent);

そして、これはマニフェストに登録された受信者です:

private class MyIntentReceiver extends BroadcastReceiver {

    private static final String TAG = "MyIntentReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(MY_ACTION)) {

            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
            wl.acquire();

            Log.e(TAG, "onReceive");

            //Carry out my action...


            wl.release();

        }
    }

}
4

2 に答える 2

0

API 19の登場により、 AlarmManagerの動作が変更されました。更新された Javadoc を読む前に、問題なく動作していたアプリのトラブルシューティングに多くの時間を費やしました。

: API 19 ( KITKAT ) 以降、アラームの配信は不正確です。OS は、ウェイクアップとバッテリーの使用を最小限に抑えるためにアラームをシフトします。厳密な配信保証を必要とするアプリケーションをサポートする新しい API があります。とを参照setWindow(int, long, long, PendingIntent)してくださいsetExact(int, long, PendingIntent)。API 19 より前のアプリケーションでtargetSdkVersionは、要求されたときにすべてのアラームが正確に配信されるという以前の動作が引き続き見られます。

于 2016-02-06T05:46:47.167 に答える