Skróty aplikacji w Androidzie

Prawie każdy użytkownik dodaje najczęściej skróty używanych aplikacji do ekranu głównego. Niestety ekran główny ma swoje ograniczenia. Dziś przekonasz się, w jaki sposób możesz tworzyć skróty aplikacji w Androidzie z najważniejszymi funkcjami.

skroty aplikacji w androidzie

Rodzaje skrótów aplikacji w systemie Android

Możemy podzielić skróty na kilka obszarów:

  1. Skróty dodawane zaraz po instalacji.
  2. Skróty statyczne.
  3. Skróty dynamiczne.
  4. Skróty przypinane.
  5. Skrót za pomocą przycisku „ekran główny”.
  6. Skróty w szybkich ustawieniach.

Dodawanie skrótów do ekranu głównego po instalacji aplikacji

Aplikacja po pierwszym uruchomieniu często dodaje skrót na ekranie głównym. Jest to dobra strategia zachęcenia użytkownika do korzystania z aplikacji. Zdarzają się też przypadki gdzie aplikacja jest głęboko ukryta na liście aplikacji, a to sprawia, że ​​trudno ją znaleźć. API Androida nie udostępnia możliwości automatycznego dodawania skrótów aplikacji do ekranu głównego zaraz po instalacji, ponieważ ekran główny jest pod kontrolą użytkownika. Jednak istnieje możliwość dodania takiego skrótu do ekranu głównego za pomocą następującego kodu:

Intent shortcutIntent = new Intent(this, MainActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut app");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                    Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                R.drawable.shortcut));
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

musisz także dodać wpis do manifestu:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

Jeżeli chcesz usunąć skrót:

Intent shortcutIntent = new Intent(this, MainActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut app");
addIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

Niestety nie utworzysz skrótów do innych aktywności, które nie są głównymi. Inaczej mówiąc, jeśli tworzysz intencje do aktywności, która nie mają wpisu w Manifest.xml:

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

Taki skrót nie zostanie utworzony do tej aktywności.

Skróty statyczne

W Androidzie 7.1 wprowadzone nowe możliwości, jeżeli chodzi o skróty. Wyobraź sobie, że masz aplikację aparatu. Użytkownik potrzebuje szybkiego dostępu do nagrywania filmu oraz zrobienia zdjęcia. Aby to zrobić, musisz pierwsze w pliku Manifest.xml dodać wpis:

<activity android:name=".MainActivity">
  ...
    <meta-data
        android:name="android.app.shortcuts"
        android:resource="@xml/shortcuts" />
   ...
</activity>

w kolejnym kroku musisz stworzyć plik @xml/shortcuts.xml, w którym zdefiniujesz skróty. Plik może mieć postać:

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="TakePhoto"
        android:enabled="true"
        android:icon="@drawable/shortcut"
        android:shortcutShortLabel="@string/shortcut_short_takePhoto"
        android:shortcutLongLabel="@string/shortcut_long_takePhoto"
        android:shortcutDisabledMessage="@string/shortcut_disabled_message"
        tools:targetApi="n_mr1">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="net.myenv.shortcut"
            android:targetClass="net.myenv.shortcut.MainActivity">
            <extra
                android:name="key"
                android:value="value" />
        </intent>
    </shortcut>
    <shortcut
        android:shortcutId="RecordVideo"
        android:enabled="true"
        android:icon="@drawable/shortcut"
        android:shortcutShortLabel="@string/shortcut_short_record"
        android:shortcutLongLabel="@string/shortcut_long_record"
        android:shortcutDisabledMessage="@string/shortcut_disabled_message"
        tools:targetApi="n_mr1">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="net.myenv.shortcut"
            android:targetClass="net.myenv.shortcut.MainActivity">
        <extra
            android:name="key"
            android:value="value" />
        </intent>
    </shortcut>
</shortcuts>

Wyjaśnijmy sobie poszczególne sekcje:

  • shortcutId — indywidualny identyfikator skrótu,
  • enabled — czy skrót jest włączony,
  • icon — ikona dla skrótu,
  • shortcutShortLabel — krótki tytuł dla skrótu, maksymalnie 10 znaków,
  • shortcutLongLabel — długi tytuł dla skrótu, maksymalnie 25 znaków,
  • shortcutDisabledMessage — wiadomość, która ukaże się, wtedy gdy dany skrót jest niedostępny,
  • tools:targetApi=”n_mr1″ —  jeśli tworzysz aplikację dla API Androida <25 musisz dodać ten wpis,
  • Intent 
    • extra — (opcjonalnie) jeśli chcemy coś przekazać przez Intent.
  • categories — grupowanie dla typów działań wykonywanych przez skróty aplikacji, np.: aplikacje czatu. Na chwilę obecną jest tylko jedna kategoria “android.shortcut.conversation“. Nie uwzględniłem tego wpisu w przykładzie.

Gdy usuniesz statyczne skróty w aplikacji to podczas aktualizacji aplikacji, system automatycznie wyłączy niedostępne skróty.

Skróty dynamiczne

Skróty statyczne mają jedną wadę, na stałe przypisujemy akcję. Skróty dynamiczne pozwalają nam na większy komfort. Wyobraź sobie teraz aplikację, która otwiera strony internetowe, użytkownik może wybrać jaką stronę chce dodać do skrótów. Na podstawie takich informacji tworzymy skrót:

ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1")
        .setShortLabel("Dynamic: MyEnv")
        .setLongLabel("Dynamic: Open myenv.net")
        .setIcon(Icon.createWithResource(this, R.drawable.shortcut))
        .setIntent(new Intent(Intent.ACTION_VIEW,
                Uri.parse("https://myenv.net/")))
        .build();
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));

Skróty możesz aktualizować za pomocą metody updateShortcuts(),  usuwać poszczególny skrót removeDynamicShortcuts() lub usunąć wszystkie skróty korzystając z metody removeAllDynamicShortcuts().

Skróty przypinane

Androidzie O dodano wsparcie dla przypinanych skrótów. Skróty przypinane różnią się od skrótów statycznych i dynamicznych tym, że każdy skrót to jedna ikona.

Kiedy chcesz dodać przypinany skrót, użytkownik otrzymuje okno dialogowe z prośbą o zgodę na przypięcie skrótu. Jeśli użytkownik nie zezwoli na przypięcie skrótu, aplikacja anuluje żądanie.

ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);
if (mShortcutManager.isRequestPinShortcutSupported()) {
    ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(this, "id2")
            .setShortLabel("Pinned: MyEnv")
            .setLongLabel("Pinned: Open myenv.net")
            .setIcon(Icon.createWithResource(this, R.drawable.shortcut))
            .setIntent(new Intent(Intent.ACTION_VIEW,
                    Uri.parse("https://myenv.net/")))
            .build();
    Intent pinnedShortcutCallbackIntent = mShortcutManager.createShortcutResultIntent(pinShortcutInfo);
    PendingIntent successCallback = PendingIntent.getBroadcast(this, 0, pinnedShortcutCallbackIntent,0);
    mShortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender());
}
else
    Toast.makeText(this, "Pinned shortcuts are not supported!", Toast.LENGTH_LONG).show();

Kod jest podobny do wcześniejszego z tą różnicą, że na początku sprawdzamy, czy aplikacja ma możliwość przypinania skrótów. Potem tworzymy skrót i na końcu wywołujemy prośbę o przypięcie wraz z akcją, która ma się wykonać.

Skrót po naciśnięciu przycisku “Ekran główny”

Uznaj ten podpunkt za ciekawostkę, chyba że tworzysz launcher. Jeżeli chciałbyś uruchamiać aplikację po naciśnięciu “ekran główny” wystarczy, że dodasz do pliku Manifest.xml:

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.HOME" />

W sekcji dla aktywności, która ma się uruchomić. Dzięki dodaniu kategorii HOME i DEFAULT aplikacja będzie proponowana jako opcjonalny zamiennik ekranu głównego. Aby telefon reagował na dłuższe naciśnięcie przycisku, to musisz stworzyć swojego asystenta.

Skróty w aplikacji Androidzie – podsumowanie

Już wiesz, jak tworzyć skróty aplikacji w Androidzie, wiesz, jakie są rodzaje i kiedy warto je stosować. Pamiętaj, że maksymalnie możesz dodać 4 skróty (dynamiczne i statyczne). W przypadku gdy użytkownik ma włączoną kopię zapasową i odinstaluje aplikację, a potem ponownie ją zainstaluje, to skróty statyczne i przypięte automatycznie się przywrócą. Skróty dynamiczne trzeba ręcznie dodać. W celu sprawdzenia ile dany skrót został wykorzystany, skorzystaj z metody reportShortcutUsed().

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 🙂