在我的清单文件中,我已经声明了接收器。 (如下)
<receiver android:name=".OnAlarmReceive" />
然而,一旦我关闭了我的应用程序,我就无法收到警报和通知。显然,我的OnReceive
中Broadcast receiver
的来电永远不会发生。
public class OnAlarmReceive extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent arg1)
{
//various stuff
}
}
在MainActivity中,我的警报管理器类如下所示。
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent("MY_ALARM_NOTIFICATION");
intent.setClass(this, OnAlarmReceive.class);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(MainActivity.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Calendar timeCal = Calendar.getInstance();
timeCal.set(Calendar.HOUR_OF_DAY, hour);
timeCal.set(Calendar.MINUTE, minutes);
alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent);
我的清单如下:
<receiver android:name=".OnAlarmReceive">
<intent-filter android:priority="1">
<action android:name="MY_ALARM_NOTIFICATION"/>
</intent-filter>
</receiver>
即使我关闭了应用,我该怎么办才能收到通知/闹钟。后台服务?
答案 0 :(得分:0)
你应该在manifest中添加intent-filter,如
receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
答案 1 :(得分:0)
正如龚聪所说,你需要宣布接收者应该听哪些事件。
例如:
<receiver android:name=".OnAlarmReceive">
<intent-filter>
<action android:name="MY_ALARM_NOTIFICATION"/>
</intent-filter> </receiver>
然后当您设置闹钟时,请使用您的操作意图:
Intent intent = new Intent("MY_ALARM_NOTIFICATION");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pi = PendingIntent.getBroadcast( this, 0, intent, 0 );
答案 2 :(得分:0)
您的代码工作正常!
您所要做的就是改变这一行:
alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(),
pendingIntent);
这一行:
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 5000, pendingIntent);
&#34; onReceive&#34;中的代码即使应用程序没有运行,也会在5000毫秒(5秒)后运行
答案 3 :(得分:0)
在我的理解中,根据实施方式的不同,操作系统有权调整闹钟设置时间。因此,请尝试使用AlarmManager.set(...),AlarmManager.setexact(...)等。在某些情况下,根据制造商(自定义Android操作系统),操作系统可能会阻止火警。
答案 4 :(得分:0)
在清单文件中为接收者添加android:exported="true"
帮助我接收警报(因此,唤醒应用程序),即使应用程序已关闭(我故意从应用程序列表中删除应用程序)。
答案 5 :(得分:-1)
1.在Manifest文件中声明接收器:
<receiver android:name="your.package.name.TestAlarmReceiver"></receiver>
永远记住整个Android系统区分大小写。因此,请检查AndroidMainfest.xml中的拼写是否正确。
2.如果您为接收者创建PendingIntent
,请添加requestCode
- 即使它是随机数!如果没有onReceive
代码,就永远不会被调用!
启动AlarmManager
的功能应如下所示:
public static void scheduleTestAlarmReceiver(Context context) {
Intent receiverIntent = new Intent(context, TestAlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 123456789, receiverIntent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+startDelay, someDelay, sender);
}
BroadcastReceiver类:
package your.package.name;
public class TestAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
// your code here!
}
}