|
|
Kierunek Informatyka
|
|||
|
|
||||
Instrukcja do ćwiczeń laboratoryjnych nr:
|
11
|
Nazwa
przedmiotu:
|
||
Temat:
Powiadomienia
|
Tryb studiów: stacjonarne |
|||
|
Czas trwanie ćw. 2x45 min |
||||
|
Autor materiałów:
dr Marcin Skuba |
||||
1. Treści programowe:
Powiadomienia, blokada
powiadomień, obsługa zdarzenia dotycząca kliknięcia powiadomienia
2. Cel zajęć:
Celem zajęć jest opanowanie
umiejętności tworzenia powiadomień oraz zarządzania nimi.
3. Materiały dydaktyczne
Przykład 1
Przykład ukazujący tworzenie nowych
powiadomień poprzez kliknięcie przycisku w widoku aplikacji

import androidx.activity.EdgeToEdge;
import androidx.annotation.RequiresPermission;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import android.Manifest;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends
AppCompatActivity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),
(v, insets) -> {
Insets systemBars =
insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left,
systemBars.top, systemBars.right,
systemBars.bottom);
return
insets;
});
if (Build.VERSION.SDK_INT
>= Build.VERSION_CODES.O)
{
int
importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel =
new NotificationChannel("CHANNEL_ID",
"Moje powiadomienie", importance);
channel.setDescription("moj
description");
NotificationManager
notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
Button button =
findViewById(R.id.button);
button.setOnClickListener(new
View.OnClickListener() {
@RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
@Override
public
void onClick(View view) {
Bitmap bitmap =
BitmapFactory.decodeResource(getResources(), R.drawable.off_ic_baseline_cast_connected_24);
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this,
"CHANNEL_ID");
builder.setContentTitle("Moja
widamosc");
builder.setContentText("Treść
mojej wiadomości ");
builder.setSmallIcon(R.drawable.on_ic_baseline_cast_24);
builder.setLargeIcon(bitmap);
builder.setAutoCancel(true);
NotificationManagerCompat
managerCompat = NotificationManagerCompat.from(MainActivity.this);
managerCompat.notify(1,
builder.build());
Log.d("TAG",
"onClick: ");
}
});
}
}
1. Sprawdzenie wersji systemu
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.O)
Kanały powiadomień zostały
wprowadzone w Androidzie 8.0 (Oreo). Ta instrukcja sprawdza, czy
telefon, na którym uruchomiona jest aplikacja, ma system w wersji 8.0 lub
nowszej. Na starszych systemach (np. Android 7) kanały nie istniały, więc ten
blok kodu zostanie tam pominięty.
2. Ustalenie ważności
(Importance)
int importance =
NotificationManager.IMPORTANCE_DEFAULT;
Definiujesz, jak bardzo
"przeszkadzające" ma być powiadomienie:
3. Konfiguracja kanału:
NotificationChannel channel =
new NotificationChannel("CHANNEL_ID",
"Moje powiadomienie", importance);

4. Opis kanału.
To
opcjonalny tekst, który użytkownik może przeczytać w ustawieniach aplikacji,
aby dowiedzieć się, jakiego rodzaju powiadomienia wysyła ten konkretny kanał (rysunek
powyżej).
channel.setDescription("moj
description");
5. Rejestracja kanału w
systemie.
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
Pobierasz systemową usługę
zarządzania powiadomieniami i "meldujesz" jej swój kanał. Dopiero od
tego momentu system Android wie, że Twoja aplikacja ma prawo wysyłać
powiadomienia przypisane do identyfikatora "CHANNEL_ID".
Od Androida 8.0 użytkownik ma pełną
kontrolę nad kanałami. Może wejść w ustawienia telefonu i wyłączyć np.
"Powiadomienia marketingowe", ale zostawić włączone
"Powiadomienia o wiadomościach" – o ile programista stworzył dla nich
osobne kanały.
Pamiętaj: Jeśli zmienisz parametry kanału (np. z
DEFAULT na HIGH) w kodzie, a kanał został już raz utworzony na telefonie,
system nie zaktualizuje go. Musiałbyś zmienić ID kanału lub odinstalować
i zainstalować aplikację ponownie, aby zmiany weszły w życie.
Wymagane pozwolenie:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
Przykład ukazujący
zmodyfikowaną metodę tworzącą powiadomienie, które po kliknięciu uruchamia
Aktywność:
button.setOnClickListener(new View.OnClickListener() {
@RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
@Override
public
void onClick(View
view) {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent =
PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.off_ic_baseline_cast_connected_24);
NotificationCompat.Builder
builder = new NotificationCompat.Builder(MainActivity.this, "CHANNEL_ID");
builder.setContentTitle("Moja widamosc");
builder.setContentText("Treść mojej wiadomości ");
builder.setSmallIcon(R.drawable.on_ic_baseline_cast_24);
builder.setLargeIcon(bitmap);
builder.setAutoCancel(true);
builder.setContentIntent(pendingIntent);
NotificationManagerCompat
managerCompat = NotificationManagerCompat.from(MainActivity.this);
managerCompat.notify(1, builder.build());
}
});
4. Zadania
Zadanie 1.
Napisz program według własnego pomysłu generujący
powiadomienia.