android - 如何让 Android BroadcastReceiver 与 AlarmManager 配合使用?

标签 android broadcastreceiver alarmmanager

我有以下代码来发布 Intent :

        alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent("myLog");
        intent.putExtra("message", new Date().toString());
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
        alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME,System.currentTimeMillis()+1000,5000,alarmIntent);

以及以下接收器:

public class myReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context, Intent intent) {
        // Extract data included in the Intent
        String message = intent.getStringExtra("message");
        logText.setText(logText.getText()+"\n"+message);
    }
}
private BroadcastReceiver mMessageReceiver = new myReceiver();

为什么我的 mMessageReceiver 仅通过 sendBroadcast 触发一次,但没有收到我的 alarmMgr 广播的 Intent ?

编辑:这也是我的 AndroidManifest.xml 文件的相关部分:

    <receiver android:name=".MainApp$myReceiver" >
        <intent-filter>
            <action android:name="com.example.*.*" />
        </intent-filter>
    </receiver>

编辑 2:更多信息:

@Override public void onResume() {
    super.onResume();
    // Register mMessageReceiver to receive messages.
    IntentFilter myIntentFilter = new IntentFilter();
    myIntentFilter.addAction("myLog");
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            myIntentFilter);
}

这会覆盖 MainActivitieonResume()

最佳答案

嗯,我可能无法理解,但这对我有用。因此,在本例中,我会在当前时间之前设置一个闹钟(例如 10 分钟左右)。

    // Calculate the time when it expires.
    long wakeupTime = System.currentTimeMillis() + duration;

    Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, wakeupTime, pendingIntent);

这会设置闹钟响起并唤醒我的广播接收器(AlarmReceiver)。我希望这会有所帮助,而且我也没有偏离基地。

关于android - 如何让 Android BroadcastReceiver 与 AlarmManager 配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835099/

相关文章:

android - 在 Google map fragment 中重新定位 MyLocation 按钮

Android SMS Delivery Broadcast 接收器在模拟器中不工作

Android AlarmManager setRepeating 不会以长间隔重复

java - NullPointer 异常和 FileInputStream

java - 如何在 Android 中打印 HashMap 中的所有键和值?

android - 如何在 android 中每周安排闹钟?

android - BroadcastReceiver 未触发通知操作点击

带有广播接收器和隐式广播禁令的 Android 8.0 Oreo AlarmManager

android - eclipse中的android模拟器可以关闭吗?如何?需要它来测试我的警报管理器在启动时自动启动

android - Android 中 IntentService 的多个实例