gpt4 book ai didi

java - 应用程序上的广播接收器已关闭(或在后台)

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:59 25 4
gpt4 key购买 nike

我创建了一个简单的警报应用程序,我有两个 broadcast receivers注册于AndroidManifest.xml (一个用于接收警报,另一个用于在设备启动时重新安排警报)。安排一些警报后,我重新启动我的设备和我的 "OnBoot" receiver很好地重新安排警报,但第一个接收器没有收到它们。如果我启动我的应用程序,安排一些警报并且不会关闭它,接收器将正常工作,但如果我关闭(不是强制停止)应用程序或通过按 home button 将其发送到后台,接收器永远不会收到警报!我在几台设备(HTC、魅族、三星)上进行了测试,并遇到了同样的问题。我发现让接收器正常工作的唯一方法是杀死应用程序,因为在我再次启动它后,即使应用程序关闭,接收器也能正常工作,但是当我再次重新启动设备后,我会遇到同样的问题。请问有人可以帮我吗?我需要做什么才能摆脱这个问题?

我尝试了几乎所有方法(更改 pendingintent flagsrequest 代码、远程 running receivers 中的 processes 、设置 intent-filtersextendWakefulBroadcastReceiver 等等),但没有任何帮助我。

AndroidManifest.xml 中的接收器

    <receiver
android:name="com.gd.aiwnext.deal.Receivers.NotificationsReceiver"
android:enabled="true"
android:exported="true"
android:process=":nr">
<intent-filter>
<action android:name="com.gd.action.intent.bri"></action>
</intent-filter>
</receiver>

<receiver
android:name="com.gd.aiwnext.deal.Receivers.NotificationBootReceiver"
android:process=":nbr">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>

广播接收器

public class NotificationsReceiver extends WakefulBroadcastReceiver {

SQLiteDatabase NoteDataBase;
NotesDataBase notesDataBase;
String OLDDATE, NEWDATE, INTPICKER, OLDTIME, NEWTIME;
String NewYear, NewMonth, NewDay, NewHour, NewMinute;
long CurrentTimeInMillis, FutureTimeInMillis;
Boolean StartAfterSleep;

String FinalHour = "", FinalMinute = "", FinalYear = "", FinalMonth = "", FinalDay = "";
boolean isDivided = false;

@Override
public void onReceive(Context context, Intent intent) {
Log.d("BLL","Simple");
int id = intent.getIntExtra("id", 1);
String note = intent.getStringExtra("note");
String interval = intent.getStringExtra("interval");
OLDDATE = intent.getStringExtra("date");
OLDTIME = intent.getStringExtra("time");
INTPICKER = intent.getStringExtra("intpicker");
CurrentTimeInMillis = intent.getLongExtra("timeinmillis", 0);
if (intent.hasExtra("startaftersleep")) {
StartAfterSleep = (intent.getBooleanExtra("startaftersleep", false));
} else {
StartAfterSleep = false;
}
CreateNotification(id, note, interval, context);
}

我使用 CreateNotification() 方法发送通知并使用数据库来更新警报的时间和日期。

创建闹钟

Intent intent = new Intent("com.gd.action.intent.bri");

之后我添加了一些额外的内容,并且

PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), IdCount, intent, PendingIntent.FLAG_ONE_SHOT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, FutureTimeMillis, pendingIntent);

最佳答案

您应该应用默认类别

<category android:name="android.intent.category.DEFAULT" />

如果未指定类别,Android 会将此类别分配给每个 Intent 。

关于java - 应用程序上的广播接收器已关闭(或在后台),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37110674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com