@Coders_Lab Mam jeszcze problem ze wznowieniem notyfikacji po ponownym uruchomieniu telefonu, i ponownym uruchomieniu aplikacji. Idea jest taka, że wykorzystuję do tego celu zmienną logiczną, którą zapisuje w SharedPreferences. Ale coś jest nie tak. Tzn. kiedy mam uruchomioną apkę z włączonymi powiadomieniemi i wyłączę telefen, to po ponownym uruchomieniu telefonu i potem apki, notyfikacje się nie pojawiają (a raczej wznawiają się ale po kilku minutach, potem już idą normalnie). Funkcja f_wznow_powiadomienia się wykonuje (bo sprawedzam to Toastem), ale pierwsza "wznowiona" notyfikacja pojawia sięw właśnie z takim mega opóźnieniem - a nie po 10 sekundach...
Poniżej załczam kod obu klas (innych rzeczy nie zmieniałem):
MainActivity.java
package eu.huras.myapplication;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
public static final String preference = "pref";
public static final String saveIt = "saveKey";
SharedPreferences sp;
static boolean czy_ustawiono_powiadomienia;
Button btn_on_off_notification;
AlarmManager alarmManager;
Intent notificationIntent;
PendingIntent broadcast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//pobieram wartość logiczną z sp
sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);//
czy_ustawiono_powiadomienia = sp.getBoolean(saveIt, false);//
btn_on_off_notification = (Button) findViewById(R.id.btn_on_off_notification);
if (czy_ustawiono_powiadomienia == true) {
f_wznow_powiadomienia();
btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
} else if (czy_ustawiono_powiadomienia == false) {
btn_on_off_notification.setText("USTAW POWIADOMIENIA");
}
}
public void f_ustaw_wylacz_powiadomienia(View view) {
btn_on_off_notification = (Button) findViewById(R.id.btn_on_off_notification);
if (czy_ustawiono_powiadomienia == false) {
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
notificationIntent = new Intent(this, AlertReceiver.class);
broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
if (android.os.Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
}
btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(saveIt, true);
editor.commit();
czy_ustawiono_powiadomienia = true;
} else if(czy_ustawiono_powiadomienia == true){
alarmManager.cancel(broadcast);
btn_on_off_notification.setText("USTAW POWIADOMIENIA");
sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(saveIt, false);
editor.commit();
czy_ustawiono_powiadomienia = false;
}
}
public void f_wznow_powiadomienia() {
Toast.makeText(this, "WZNOWIONO PO PONOWNYM URUCHOMIENIU", 2000).show();
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
notificationIntent = new Intent(this, AlertReceiver.class);
broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
if (android.os.Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast); //teraz będzie co 10 sekund
}
btn_on_off_notification.setText("USUŃ POWIADOMIENIA");
sp = getSharedPreferences(preference, MainActivity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(saveIt, true);
editor.commit();
czy_ustawiono_powiadomienia = true;
}
}
AlertReceiver
package eu.huras.myapplication;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
public class AlertReceiver extends BroadcastReceiver {
private static final String CHANNEL_ID = "567";
@Override
public void onReceive(Context context, Intent intent) {
Intent notificationIntent = new Intent(context, NotificationActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(NotificationActivity.class);
stackBuilder.addNextIntent(notificationIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder = new Notification.Builder(context);
Notification notification = builder.setContentTitle("tytul powiadomienia")
.setContentText("tekst powiadomienia")
.setTicker("powiadomienie")
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true)
.setContentIntent(pendingIntent).build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(CHANNEL_ID);
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
CHANNEL_ID,
"NotificationDemo",
IMPORTANCE_DEFAULT
);
notificationManager.createNotificationChannel(channel);
}
notificationManager.notify(0, notification);
Intent notificationIntent2 = new Intent(context, AlertReceiver.class);
PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, notificationIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(broadcast);
if (Build.VERSION.SDK_INT >= 19) {
if (MainActivity.czy_ustawiono_powiadomienia == true) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast);
} else {
alarmManager.cancel(broadcast);
}
} else {
if (MainActivity.czy_ustawiono_powiadomienia == true) {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, broadcast);
} else {
alarmManager.cancel(broadcast);
}
}
}
}
Będę wdzięczny za pomoc...