首页 > 解决方案 > 即使应用程序关闭,也每 5 分钟播放一次提醒歌曲

问题描述

我尝试每 5 分钟显示一次敬酒并播放一首警报歌曲,但它不起作用,没有任何反应。

显现:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

..

<receiver android:name=".AlarmReceiver"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>

主要活动:

alarmMgr = (AlarmManager)MainActivity.this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

// Set the alarm to start at 8:30 a.m.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 8);
        calendar.set(Calendar.MINUTE, 30);

// setRepeating() lets you specify a precise custom interval--in this case,
// 5 minutes.
        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 * 5, alarmIntent);

报警接收器:

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Toast.makeText(context, "OnReceive alarm test", Toast.LENGTH_SHORT).show();
    }
}

如果缺少某些东西或有什么问题,有什么想法吗?

标签: androidbroadcastreceiver

解决方案


setRepeating在功能上已弃用(从 api 19 开始),支持setInexactRepeating它的最小间隔为 15 分钟,并且在批处理多个警报时可能会增加额外的延迟。

如果您想要如此激进的警报,则需要使用一次性setExact警报并重新安排下一个警报onReceive


推荐阅读