Вопрос по alarmmanager, android – onReceiver от BroadcastReceiver не вызывается, AlarmManager

6

Я создаю приложение бронирования такси, мне нужно текущее местоположение такси каждые 20 секунд.

Я определил AlarmManager, и мне нужно, чтобы он повторялся каждые 20 секунд. Но это не повторяется регулярно. Вместо этого он повторился через 233 секунды и только один раз. Что я здесь не так делаю?

Мой HomeScreen имеет внутренний класс OnAlarmReceiver, в onCreate моего HomeScreen я вызываю AlarmManager

    AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(this, OnAlarmReceiver.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 20);
    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            cal.getTimeInMillis(), God.UPDATE_PENDING_INTERVAL, pi);

Внутренний класс в HomeScreen

public class OnAlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // PullPendingRequests.acquireStaticLock(context);
        Toast.makeText(context, "Don't panik but your time is up!!!!.", Toast.LENGTH_LONG)
                .show();
        Log.d("Taxeeta:PullPendingRequets", "CallService Location");
        context.startService(new Intent(context, PullPendingRequests.class));
    }
}

Мой файл AndroidManifest имеет

    

    

Выход изadb shell dumpsys alarm

 com.taxeeta
    51471ms running, 5248 wakeups
    5248 alarms: flg=0x4 cmp=com.taxeeta/.HomeScreen$OnAlarmReceiver

Выход изadb shell dumpsys alarm | grep taxeeta

 ELAPSED_WAKEUP #7: Alarm{409303b0 type 2 com.taxeeta}
    operation=PendingIntent{408ba2d8: PendingIntentRecord{40887be8 com.taxeeta broadcastIntent}}
 com.taxeeta
    5248 alarms: flg=0x4 cmp=com.taxeeta/.HomeScreen$OnAlarmReceiver

Ваш Ответ

3   ответа
0

не получать любые обратные вызовы, когдаAlarmManager срабатывает просроченная тревога. Вам просто нужно проверить это:отправив неправильныйIntent при созданииPendingIntent, Например, вы хотели получить звонокonReceive на одном из ваших приемников, но вы создали экземплярPendingIntent с помощьюgetActivity или жеgetService, но то, что вы на самом деле имели в видуgetReceiver

При создании экземпляраPendingIntentЕсть много способов создать его (, ,,:getServicegetActivitygetReceivergetForegroundService

если ты хочешьActivity Получатель намерения, то вы:

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*);

если ты хочешьBroadcastReceiver получатель намерения:

PendingIntent.getReceiver(this, 0, intent, PendingIntent.FLAG_*);

если ты хочешь передний планService получатель намерения:

PendingIntent.getForegroundService(this, 0, intent, PendingIntent.FLAG_*);

если вы хотитеService получатель намерения:

PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_*);

Также убедитесь, что вы намерены указывать на правильный класс. (например, создание намерений для деятельности, обслуживания и т. д.). Ты сможешьне принять любой вызов, если вы передадите ошибочно, как это:

Intent intent = new Intent(this, MyReceiver.class); // You wanted receiver

// PendingIntent was created in such a way 
// you wanted this to be received by an activity. 
// you will not receive any call if you set it up like this.
PendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*); 

Я также отправил аналогичный ответВот.

НТН

0

что вы добавили приемник в файл манифеста Android.

AlarmManager service = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, OnAlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
                         PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
// Start 20 seconds after boot completed
cal.add(Calendar.SECOND, 20);
//
// Fetch every 20 seconds
// InexactRepeating allows Android to optimize the energy consumption
service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                       cal.getTimeInMillis(), 1000*20, pending);
Нет, не работает. OnAlarmReceiver, onReceive также не вызывается. Siddharth
Это же тут у меня ничего по алармэнджеру не работает. Я'Мы перепробовали все предложения для этого. Не уверен, что делать довольно застрял JPM
10

я удалил внутренний класс OnAlarmReceiver и исправил файл androidmanifest.xml.

    <receiver android:name="com.taxeeta.support.OnAlarmReceiver" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.NOTIFY">
        </action></intent-filter>
    </receiver>

Похожие вопросы