Obraz zawierający tekst, Czcionka, Grafika

Opis wygenerowany automatycznie 

Kierunek Informatyka

 

Instrukcja do ćwiczeń laboratoryjnych nr:

11

Nazwa przedmiotu:
Programowanie aplikacji mobilnych

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

Android Developers

 

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);

 

Obraz zawierający tekst, elektronika, zrzut ekranu, System operacyjny

Zawartość wygenerowana przez AI może być niepoprawna.      Obraz zawierający tekst, elektronika, zrzut ekranu, Czcionka

Zawartość wygenerowana przez AI może być niepoprawna.

 

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.