Android广播接收器在一段时间后无法工作
我正在创建提醒通知。我使用AlarmService类创建通知,并使用AlarmReceiver类扩展BroadcastReceiver。通知已正确创建,但我仅在特定时间内收到这些提醒的通知。例如,如果我在30分钟后设置提醒,则通知不起作用。在我的服务课上,我返回START\u STICKY。这是我的代码:Android广播接收器在一段时间后无法工作,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我正在创建提醒通知。我使用AlarmService类创建通知,并使用AlarmReceiver类扩展BroadcastReceiver。通知已正确创建,但我仅在特定时间内收到这些提醒的通知。例如,如果我在30分钟后设置提醒,则通知不起作用。在我的服务课上,我返回START\u STICKY。这是我的代码: public class AlarmService extends Service{ .... while(...){ //call to the method to create notif
public class AlarmService extends Service{
....
while(...){
//call to the method to create notifications
createNotification(year, month, day_of_month, hour_of_day, minute, second, reminderID);
}
return START_STICKY;
}
//method to create notifications
public void createNotification(int year, int month, int day_of_month, int hour_of_day, int
minute, int second, int reminderID){
counter++;
Calendar cal = Calendar.getInstance();
// add minutes to the calendar object
cal.set(Calendar.MONTH,month); // the month starts with JAN == 0
cal.set(Calendar.YEAR,year);
cal.set(Calendar.DAY_OF_MONTH,day_of_month);
cal.set(Calendar.HOUR_OF_DAY,hour_of_day);
cal.set(Calendar.MINUTE,minute);
cal.set(Calendar.SECOND,second);
Intent alarmintent = new Intent(getApplicationContext(), AlarmReceiver.class);
.......
PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), HELLO_ID+counter, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
//////////////////////////////////////////////////////////////////////////////
public class AlarmReceiver extends BroadcastReceiver {
private static int NOTIFICATION_ID = 555;
@Override
public void onReceive(Context context, Intent intent) {
........
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
context)
.setSmallIcon(R.drawable.android100)
.setContentTitle(note)
.setLargeIcon(bitmap)
.setContentText(title)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
Intent notifyIntent = new Intent(context, DisplayReminder.class);
notifyIntent.putExtra("reminderID", ""+reminderID);
PendingIntent contentIntent = PendingIntent.getActivity(context, reminderID, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID++, mBuilder.build());
}.....
最后,我以这种方式启动服务表单活动,而不是主要活动:
Intent alarmServiceIntent = new Intent(getApplicationContext(), AlarmService.class);
startService(alarmServiceIntent);
这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.papp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/android100"
android:label="@string/app_name"
android:theme="@style/AppHoloTheme">
<activity
android:name=".MainActivity"
android:label="Le tue medicine"
android:screenOrientation="landscape">
</activity>
<activity
android:label="Inserisci un nuovo promemoria"
android:name=".InsertNewReminder">
</activity>
<activity
android:label="Anteprima promemoria"
android:name=".DisplayOverview">
</activity>
<receiver android:name=".AlarmReceiver">
<!-- <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter> -->
</receiver>
<service android:name=".AlarmService"></service>
<activity
android:label="@string/app_name"
android:name=".GalleryListMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="Salvataggio promemoria"
android:name="com.example.papp.DbActivity">
</activity>
<activity
android:label="Salvataggio promemoria"
android:name=".InsertNewRemindeResponse"
android:launchMode="singleTask">
</activity>
<activity
android:label="Promemoria"
android:name=".DisplayReminder">
</activity>
<activity
android:label="Modifica promemoria"
android:name=".UpdateReminder">
</activity>
<receiver android:name=".BootReceiver" android:enabled="true" android:exported="true">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<activity
android:label="Cancellazione promemoria"
android:name=".DeleteReminder"
android:launchMode="singleTask">
</activity>
</application>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
</manifest>
我尝试了不同的尝试,但没有成功:我确信如果我手动关闭应用程序,由于启动粘滞,服务会自动重启。
有什么建议吗?谢谢…在这里检查我的问题。。。也许你会有一些想法,但我不会关掉设备。设备是开着的,但是在一段时间后通知不起作用……我已经为不同的类创建了不同的包。现在我已经在一个包中插入了所有类,但问题仍然存在。前约30分钟内的混音器正确显示,而在一定时间段内(例如30分钟内)没有任何事情发生。请帮助meSorry bro我帮不了你,但自从我提出这个问题以来,我真的从来没有做过闹钟或提醒,因为我忙于其他项目。但我还是会在周日前帮你。这是肯定的。而且,我尝试使用IntentService而不是Service,但结果是一样的。。。