0

毎日正午に表示されるAndroid通知を取得しようとしています。通知は、デバイスが起動されるたびに 1 回表示され、その後は散発的に表示されるようです。

これが私のサービスです:

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

任意のポインタをいただければ幸いです。ありがとうございました。

4

2 に答える 2

1

発生している可能性があるのは、システムが Service を強制終了してメモリを解放し、スーパークラスがonStartCommand()返さSTART_STICKYれて後で再作成され、通知が散発的に表示されることです。

本当に、サービスの目的が通知を作成することだけである場合は、コードのその部分をある種の BroadcastReceiver に移動するか、通知の作成後にサービスを停止することを検討してください。

于 2013-08-09T19:38:23.583 に答える
1

独自の通知/アラーム クラスを設定しようとしました。それを管理する唯一の方法は、Android カレンダーを拡張することでした。

この方法で試してみたい場合は、まず次のリンクを参照してください。

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

私はこのアプローチの例を持っていますが、私は仕事をしています。必要に応じて後でコードを提供できます!

于 2013-08-09T19:26:31.263 に答える