Hallo,
ich habe hier eine Auflistung von Themen, ähnlich einem TV-Programm.
Manche Themen sind interessant, andere weniger, und von den Interessanten will ich benachrichtigt werden.
Diese Benachrichtigung soll zu einem festgelegten Zeitpunkt (kann Tage, Monate oder Jahre später) passieren und ich möchte auch, wenn nötig, die Erinnerung an die Benachrichtigung abbrechen.
Hierzu einige Unklarheiten:
Broadcast Receiver:
Hauptanwendung:
ich habe hier eine Auflistung von Themen, ähnlich einem TV-Programm.
Manche Themen sind interessant, andere weniger, und von den Interessanten will ich benachrichtigt werden.
Diese Benachrichtigung soll zu einem festgelegten Zeitpunkt (kann Tage, Monate oder Jahre später) passieren und ich möchte auch, wenn nötig, die Erinnerung an die Benachrichtigung abbrechen.
Hierzu einige Unklarheiten:
- Was hat es mit der "Channel-Id" auf sich? Benötige ich für jedes einzelne ausgewählte Thema in der Auflistung eine eindeutige Channel-Id oder stellt diese eine Art Wiedererkennung der App dar?
- Wie erfolgt der Start und der Abbruch einer zeitgerichteten Benachrichtigung? Aus dem folgenden Code geht unklar hervor, wie die App wissen soll, welche Benachrichtigung beim Abbruch gemeint ist.
Broadcast Receiver:
Java:
public class NotificationReceiver extends BroadcastReceiver {
private static String _channelId = "";
private static String _title = "Erinnerung";
private static String _text = "";
public static String getChannelId() {
return _channelId;
}
public static void setChannelId(String channelId) {
_channelId = channelId;
}
public static String getTitle() {
return _title;
}
public static void setTitle(String title) {
_title = title;
}
public static String getText() {
return _text;
}
public static void setText(String text) {
_text = text;
}
@Override
public void onReceive(Context context, Intent intent) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, _channelId);
builder.setContentTitle(_title);
builder.setContentText(_text);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
builder.setAutoCancel(true);
NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context, "Benachrichtigung aktivieren!" , Toast.LENGTH_LONG).show();
return;
}
managerCompat.notify(1, builder.build());
}
}
Hauptanwendung:
Java:
import org.joda.time.DateTime;
public class MainActivity extends AppCompatActivity {
Intent _intent;
PendingIntent _pendingIntent;
AlarmManager _alarmManager;
NotificationChannel _notificationChannel;
NotificationManager _notificationManager;
String _channelId;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_intent = new Intent(MainActivity.this, NotificationReceiver.class);
_pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, _intent, PendingIntent.FLAG_IMMUTABLE);
_alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
}
private void createNotifcationChannel() {
_notificationChannel = null;
_notificationManager = null;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) { // > API 25
_notificationChannel = new NotificationChannel(_channelId, String.valueOf(R.string.app_name), NotificationManager.IMPORTANCE_DEFAULT);
_notificationManager = getSystemService(NotificationManager.class);
_notificationManager.createNotificationChannel(_notificationChannel);
}
private void startNotification() {
_channelId = "neue id";
NotificationReceiver.setChannelId(_channelId);
createNotifcationChannel();
DateTime dummy = new DateTime(2024, 3 , 2, 1, 0);
long milliseconds = dummy .getMillis();
_alarmManager.set(AlarmManager.RTC_WAKEUP, milliseconds, _pendingIntent);
}
private void stopNotification() {
_alarmManager.cancel(_pendingIntent);
}
}