2013-08-09 2 views
0

Я пытаюсь получить уведомление по Android, которое будет отображаться в полдень каждый день. Как правило, уведомление появляется каждый раз, когда устройство запускается, а затем несколько спорадически после этого.Ежедневное уведомление Android отображается несколько раз в неподходящее время

Вот моя служба:

public class myService extends Service { 
public static final String TAG = "LocationLoggerServiceManager"; 
@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    Log.v(TAG, "on onCreate"); 
} 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, LoginActivity.class), 0); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("App name") 
      .setContentText("Notification") 
      .setContentIntent(contentIntent) 
      .setDefaults(Notification.DEFAULT_SOUND) 
      .setAutoCancel(true); 
    NotificationManager mNotificationManager = 
     (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify("main", 1, mBuilder.build()); 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 

и приемник:

public class MyBroadcastReceiver extends BroadcastReceiver { 

public static final String TAG = "LocationLoggerServiceManager"; 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.d(TAG, "Broadcast Received"); 
    handleMessage(context, intent); 
} 


private void handleMessage(Context context, Intent intent) 
{ 
    PendingIntent contentIntent = PendingIntent.getService(context, 0, new Intent(context, myService.class), 0); 

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(contentIntent); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 12); 
    calendar.set(Calendar.MINUTE, 00); 
    calendar.set(Calendar.SECOND, 00); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , contentIntent); 
} 
} 

Все указатели оценили. Спасибо.

ответ

1

Я попытался настроить свой собственный класс уведомления/тревоги. Единственный способ, которым я нашел, - это расширить календарь Android.

Если вы хотели бы попробовать это таким образом видеть эту ссылку для начала:

http://developer.android.com/guide/topics/providers/calendar-provider.html

У меня есть пример такого подхода, однако я нахожусь на работе, я могу предоставить свой код позже, если вы нужно это!

1

Что может происходить в том, что система убивает вашу службу, чтобы освободить память и так суперкласса onStartCommand() возвращается START_STICKY, воссоздает его позже, в результате чего ваше уведомление спорадически появляются.

Действительно, если целью службы является только уведомление, подумайте над тем, чтобы переместить эту часть кода каким-то образом BroadcastReceiver или остановить службу после создания Уведомления.

+0

Так что избавитесь от BroadcastReceiver все вместе? – RyPope

+0

@RyPope Я предполагаю, что 'MyBroadcastReceiver' слушает события загрузки. Необходимо установить «будильник» в полдень. Что означает 'myService', чтобы делать что-либо помимо уведомления? –

+0

Я считаю, что сервис - это то, что вызывается, когда для событий времени загрузки. – RyPope

Смежные вопросы