Как установить Уведомление локально, используя Service и Broadcastreceiver?
Я новичок в Android. Я хочу установить Уведомление локально, которое запускает его в определенное время ежедневно. Когда я запускаю службу... Уведомление срабатывает сразу...
я хочу знать, как запустить уведомление в определенное время без немедленной стрельбы
Шаг 1:
public class startservice extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(startservice.this,MainActivity.class);
startservice.this.startService(intent);
}
});
}
}
Шаг 2: Запустите Сервис
public class MainActivity extends Service {
AlarmManager am;
Calendar calendar;
int count=0;
@Override
public void onCreate() {
super.onCreate();
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
calendar=Calendar.getInstance();
setNotification();
}
public void setNotification() {
Intent intent = new Intent(this, Startnotification.class);
calendar.set(Calendar.HOUR, 9); // At the hour you wanna fire
calendar.set(Calendar.MINUTE,12); // Particular minute
calendar.set(Calendar.SECOND, 0);
double x = Math.random();
String value=String.valueOf(x);
intent.putExtra("name", value);
sendBroadcast(intent);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, count,intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),3600000,pendingIntent);
count++;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
Шаг 3: BroadcastReceiver
public class Startnotification extends BroadcastReceiver {
NotificationManager nm;
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
String getvalue= intent.getStringExtra("name");
CharSequence from = getvalue;
CharSequence message = "Android calendar...";
PendingIntent contentIntent = PendingIntent.getService(context, 0, new Intent(),0);
Notification notif = new Notification(R.drawable.ic_launcher,"Android calendar...", System.currentTimeMillis());
notif.setLatestEventInfo(context, from, message, contentIntent);
nm.notify(1, notif);
System.out.println("BroadcastReceiver");
}
}
Как этого добиться
Заранее спасибо...
1 ответ
В setNotification()
ты звонишь
sendBroadcast(intent);
Это называет ваш Startnotification.onReceive()
немедленно.
Кроме того, вы устанавливаете HOUR в экземпляре Calendar следующим образом:
calendar.set(Calendar.HOUR, 9); // At the hour you wanna fire
Но вы явно не установили индикатор AM/PM для 12-часового времени (HOUR используется для установки 12-часового времени). Это означает, что индикатор AM/PM по-прежнему будет установлен на то, что было, когда вы звонили Calendar.getInstance()
, Если вы запустите этот код, например, в 10:00 утра и установите для ЧАСА значение 9, будильник немедленно отключится, потому что время уже прошло.