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

时间:2016-05-09 08:11:11

标签: java android broadcastreceiver

我创建了一个简单的警报应用程序,我在broadcast receivers中注册了两个AndroidManifest.xml(一个用于接收警报,另一个用于在设备启动时重新安排它们)。在安排了一些警报后,我重启了我的设备并且我的"OnBoot" receiver重新安排了警报,但是第一个接收器没有重新启动它们。如果我启动我的应用程序,安排一些警报并且不会关闭它,接收器将正常工作,但如果我关闭(不强制停止)应用程序或通过按下主页button将其发送到后台永远不会收到警报!我在几个设备(HTC,魅族,三星)上测试了它并遇到了同样的问题。我发现只有一种方法可以使接收器正常工作是杀死app,因为在我再次启动后,接收器工作正常甚至应用程序关闭,但在我重新启动设备后我会遇到同样的问题。拜托,任何人都可以帮助我吗?我需要做些什么来摆脱这个问题?

我尝试了几乎所有内容(更改了pendingintent flagsrequest代码,running receivers代码位于远程processes,设置intent-filtersextend来自{ {1}}和许多其他人)但没有任何帮助我。

AndroidManifest.xml中的接收器

WakefulBroadcastReceiver

广播接收器

    <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>

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

制作闹钟

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);
}

之后我加了一些,

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

1 个答案:

答案 0 :(得分:0)

您应该应用默认类别

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

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