Własne kafelki w szybkich ustawieniach Androida

Od Androida 7.0 (API 24) zostało wprowadzona funkcja która umożliwia dodawanie własnych skrótów akcji w Twojej aplikacji. Własne kafelki w szybkich ustawieniach Androida bardzo są przydatne z punktu widzenia użytkownika ponieważ umożliwiają wykonanie konkretnej akcji. Na przykład: synchronizacji danych, uruchomienie jakiegoś urządzenia zdalnie – bez wchodzenia do aplikacji. Jednak musimy pamięta aby nie nadużywać tej funkcjonalności. W tym wpisie pokaże Ci w jaki sposób stworzyć taki kafelek i jak jego obsłużyć.
wlasne-kafelki-w-szybkich-ustawieniach-androida

1. Plik Manifest.xml

Jak w przypadku każdego serwisu musimy też zdefiniować go w pliku manifestu:

<service
    android:name="Tiles.Tile"
    android:label="@string/label_tile"
    android:icon="@android:drawable/star_off"
    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
    <intent-filter>
        <action android:name="android.service.quicksettings.action.QS_TILE" />
    </intent-filter>
</service>

2. Cykl życia kafelków

Cykl życia usługi TileService jest kontrolowany głównie przez system Android. Istnieją trzy fazy cyklu życia:

  • dodawanie ( onTileAdded() ) – metoda ta jest wywoływana gdy kafelek jest dodawany do szybkich ustawień,
  • nasłuchiwanie – jeżeli wysuwasz belkę z szybkimi ustawieniami wykonywana jest metoda onStartListening(), zaś gdy chowasz belkę wywoływana jest metoda onStopListening(),
  • usuwanie onTileRemoved() ) – metoda ta jest wywoływana gdy kafelek jest usuwany z szybkich ustawień.

3. Kod usługi

Przykładowy kod usługi może wyglądać następująco:

package Tiles;
import android.graphics.drawable.Icon;
import android.os.Build;
import android.service.quicksettings.TileService;
import android.support.annotation.RequiresApi;
import android.util.Log;
@RequiresApi(api = Build.VERSION_CODES.N)
public class Tile extends TileService {
    private String TAG = "Tile";
    @Override
    public void onTileAdded() {
        Log.i(TAG, "Method: onTileAdded");
        super.onTileAdded();
    }
    @Override
    public void onTileRemoved() {
        Log.i(TAG, "Method: onTileRemoved");
        super.onTileRemoved();
    }
    @Override
    public void onStartListening() {
        Log.i(TAG, "Method: onStartListening");
        super.onStartListening();
    }
    @Override
    public void onStopListening() {
        Log.i(TAG, "Method: onStopListening()");
        super.onStopListening();
    }
    @Override
    public void onCreate() {
        Log.i(TAG, "Method: onCreate");
        super.onCreate();
    }
    @Override
    public void onClick() {
        Log.i(TAG, "Method: onClick");
        super.onClick();
        updateTile();
    }
    private void updateTile() {
        if (android.service.quicksettings.Tile.STATE_ACTIVE == getQsTile().getState()) {
            Log.d(TAG,"State: INACTIVE");
            changeTileState(android.service.quicksettings.Tile.STATE_INACTIVE);
        } else if (android.service.quicksettings.Tile.STATE_INACTIVE == getQsTile().getState()) {
            Log.d(TAG,"State: ACTIVE");
            changeTileState(android.service.quicksettings.Tile.STATE_ACTIVE);
        }
    }
    private void changeTileState(int newState) {
        getQsTile().setIcon(Icon.createWithResource(this,
                newState == android.service.quicksettings.Tile.STATE_INACTIVE ? android.R.drawable.star_off : android.R.drawable.star_on));
        getQsTile().setState(newState);
        getQsTile().updateTile();
    }
}

Powyższy przykład pokazuje zachowanie ikonki (gwiazdka). Jeśli stan jest aktywny to ikonka jest cała biała, natomiast jeśli stan jest nieaktywny ikonka jest szara. Przykład ten można rozbudować o własne potrzeby w metodzie updateTile(). Warto też wspomnieć o tym, że jeżeli chcemy wyświetlić jakąś informację na ekranie np.: AlertDialog to musimy sprawdzić czy urządzenie jest odblokowane w przeciwnym wypadku alert pokaże się pod ekranem blokady i użytkownik nie zobaczy komunikatu.

if (!isLocked()) {
       updateTile();
   } else {
       unlockAndRun(new Runnable() {
           @Override
           public void run() {
               updateTile();
           }
       });
   }

 

4. Podsumowanie

Własne skróty akcji w szybkich ustawieniach dają Ci zupełnie nową powierzchnię do interakcji z użytkownikami i pozwalają najbardziej wymagającym użytkownikom na szybki dostęp do kluczowych i częstych operacji w Twojej aplikacji.  Zachęcam do korzystania z możliwości dodawania własnych kafelków. Pamiętaj aby to robić z umiarem, a nie na siłę.

Co dalej?

  • Polub stronę MYENV na Facebooku oraz śledź mnie na Twitterze
  • Zachęcam do komentowania i pisania propozycji tematów, o których chcesz przeczytać
  • Poleć ten wpis za pomocą poniższych przycisków. Będę Ci za to bardzo wdzięczny 🙂
  • Życzę Ci miłego dnia i miłego kodowania 🙂