私のアプリが実行されていなくても、特定の時刻に毎日(午前7時)の通知を表示する必要があります。(閉じた状態)アプリが閉じていても特定の時刻に毎日特定の時刻にローカル通知をトリガーする
通知の内容は、ユーザ固有のものになりますように、私は(GCM)を使用するカント私はチュートリアルと回答の多くを経ていますが、私は通知を表示することができカント
を押しますアプリが閉じているとき(実行していないとき)
編集:私は私のアプリが起動している間、私は私のアプリの通知を閉じた場合、通知を作成することができるよ以下のコードを使用して
ここに私のメインの活動はあるが現れている
public class MainActivity extends AppCompatActivity {
Button setAlarm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setAlarm = (Button) findViewById(R.id.set_alarm);
setAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NotificationEventReceiver.setupAlarm(getApplicationContext());
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
}
ここ
私は、設定されたアラームボタンをクリックしたときに、私のNotificationEventReciver
が
public class NotificationEventReceiver extends WakefulBroadcastReceiver {
private static final String ACTION_START_NOTIFICATION_SERVICE = "ACTION_START_NOTIFICATION_SERVICE";
private static final String ACTION_DELETE_NOTIFICATION = "ACTION_DELETE_NOTIFICATION";
public static void setupAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, NotificationEventReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, getTriggerAt(new Date()), 2 * 60 * 1000, alarmIntent);
}
private static long getTriggerAt(Date now) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 10);
System.err.println(now.getTime()+"----->"+ calendar.getTimeInMillis());
return calendar.getTimeInMillis();
}
public static void cancelAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmIntent = getStartPendingIntent(context);
alarmManager.cancel(alarmIntent);
}
private static PendingIntent getStartPendingIntent(Context context) {
Intent intent = new Intent(context, NotificationEventReceiver.class);
intent.setAction(ACTION_START_NOTIFICATION_SERVICE);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static PendingIntent getDeleteIntent(Context context) {
Intent intent = new Intent(context, NotificationEventReceiver.class);
intent.setAction(ACTION_DELETE_NOTIFICATION);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = NotificationIntentService.createIntentStartNotificationService(context);
if (serviceIntent != null) {
System.err.println("onReceive inside not null");
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, serviceIntent);
}
}
}
を呼び出します0
アラームが解除されたときに実行されるサービスクラスです。
public class NotificationIntentService extends IntentService {
private static final int NOTIFICATION_ID = 1;
private static final String ACTION_START = "ACTION_START";
private static final String ACTION_DELETE = "ACTION_DELETE";
public NotificationIntentService() {
super(NotificationIntentService.class.getSimpleName());
}
public static Intent createIntentStartNotificationService(Context context) {
Intent intent = new Intent(context, NotificationIntentService.class);
intent.setAction(ACTION_START);
return intent;
}
@Override
protected void onHandleIntent(Intent intent) {
System.err.println("onHandleIntent, started handling a notification event");
try {
String action = intent.getAction();
if (ACTION_START.equals(action)) {
System.err.println("enters the loop ACTION_START");
processStartNotification();
}
} finally {
WakefulBroadcastReceiver.completeWakefulIntent(intent);
}
}
private void processStartNotification() {
// Do something. For example, fetch fresh data from backend to create a rich notification?
System.err.println("inside the notify method");
Intent mainIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, NOTIFICATION_ID, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("Scheduled Notification")
.setAutoCancel(true)
.setColor(getResources().getColor(R.color.colorAccent))
.setContentText("This notification has been triggered by Notification Service")
.setSmallIcon(R.drawable.ic_launcher);
builder.setContentIntent(pendingIntent);
final NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, builder.build());
}
}
gcmでユーザー指定のデータをプッシュできます。 gcm reg idのユーザまたはデバイスとの関連付けを行い、ユーザの電話機に直接送信します。 – amalBit
アラームマネージャ、保留中のインテントおよびブロードキャストレシーバで組み合わせを使用する必要があります。 – Aradhna
@Aradhnaコードを完全にご覧ください!私は正確にすべての3つを使用していると通知を作成することができます!私のアプリが閉鎖されている場合、私の通知は機能していません! – Praneeth