AppShortcuts에서 Navigation Drawer가 있는 Activity를 시작할 때 설치하는 방법

이번에 제가 개발한KyudoScoreBook에서 AppShortcuts를 실현했습니다.
KyudoScoreBook Navigation Drawer를 구글 플레이스타처럼 사용한다.
Navigation Drawer에서 마이그레이션할 수 있는 기본 기능 화면에는 Navigation Drawer의 메뉴가 선택된 상태에서 표시되기 때문에 화면별로 Fragment로 전환하는 설치가 적용된다.

AppShortcuts에서 이루고 싶은 거.



AppShortcuts에서는 Navigation Drawer의 메뉴에 표시되는 기록, 메모 일람, 그래프, 점괘 등 4개 메뉴가 구현된다.
앞에서 말한 바와 같이 기록된 단축키에서 시작하는 경우 Navigation Drawer의 기록을 선택하여 상태로 시작하기를 원합니다.
또 화면별로 동일한 액티비티를 적용해 여러 개의 Fragment 설치를 전환하고, 앱 Shortcuts에서 시작할 때 동일한 액티비티를 시작해야 한다.
App ShortCuts의 설명과 googlesamples/android-AppShortcuts 중 단축키의 샘플 코드가 하나밖에 없어서 난처합니다.

Static Shortcuts int에 Extra 넣기


AppShortcuts에서 같은 Activity를 시작해서 다른 Fragment를 표시하려면 intent에 Extra 시작을 채워야 하기 때문이다.
이때 아래와 같이 <intent> 라벨<extra>으로 라벨을 감는다.

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <shortcut
      android:enabled="true"
      android:icon="@drawable/ic_short_record"
      android:shortcutId="shortcut_record"
      android:shortcutLongLabel="@string/shortcut_record"
      android:shortcutShortLabel="@string/shortcut_record">
    <intent
        android:action="android.intent.action.VIEW"
        android:targetClass="com.bowyer.app.appshortcuts.ui.activity.MainActivity"
        android:targetPackage="com.bowyer.app.appshortcuts">
      <extra
          android:name="shortcut_id"
          android:value="RecordTabFragment"/>
    </intent>
    <categories android:name="android.shortcut.conversation"/>

  </shortcut>
  <shortcut
      android:enabled="true"
      android:icon="@drawable/ic_short_memo"
      android:shortcutId="shortcut_memos"
      android:shortcutLongLabel="@string/shortcut_memo_list"
      android:shortcutShortLabel="@string/shortcut_memo_list">
    <intent
        android:action="android.intent.action.VIEW"
        android:targetClass="com.bowyer.app.appshortcuts.ui.activity.MainActivity"
        android:targetPackage="com.bowyer.app.appshortcuts">
      <extra
          android:name="shortcut_id"
          android:value="MemoListFragment"/>
    </intent>

    <categories android:name="android.shortcut.conversation"/>
  </shortcut>
</shortcuts>

처리가 시작된 AppShortcuts


AppShortcuts에서 시작되는MainActivity는 intent에서 shortcut_id Extra를 가져옵니다.
나의 경우, 보통 시작에도 MainActivity를 사용하기 때문에 shortcut_id 존재하는지 검사하고 있습니다.

private static final String KEY_SHORTCUT_ID = "shortcut_id";
・・・
private void handleShortcutsAction() {
    boolean hasExtra = getIntent().hasExtra(KEY_SHORTCUT_ID);
    if (!hasExtra) {
      return;
    }
    String shortcutId = getIntent().getStringExtra(KEY_SHORTCUT_ID);
・・・
그리고 이것shortcutId에 대응하는 처리를 기록합니다.

    String shortcutId = getIntent().getStringExtra(KEY_SHORTCUT_ID);
    // 取得したshortcutIdからどのFragmentを起動するか決める
    Page page = Page.forMenuId(shortcutId);
    switch (page.getMenuId()) {
      case R.id.nav_record:
        pageChange(RecordTabFragment.newInstance());
        break;
      case R.id.nav_memo:
        pageChange(MemoListFragment.newInstance());
        break;
      case R.id.nav_chart:
        pageChange(ChartFragment.newInstance());
        break;
      case R.id.nav_notification:
        pageChange(NotificationFragment.newInstance());
        break;
      case R.id.nav_fortune:
        pageChange(FortuneFragment.newInstance());
        break;
    }
    // Navigation Drawerを選択状態にする
    navigationView.setCheckedItem(page.getMenuId());
구글 플레이스토어처럼 Navigation Drawer에서 여러 개의 Fragment에서 사용하는 앱을 전환하고 앱 Shortcuts를 설치할 때는 참고하십시오.

AppShortcuts의 샘플 코드


이번에 발표된 프로그램의 일부 코드를 공개했다.KyudoScoreAppShortcuts
이 샘플 코드를 제공한 후 바로 Static Shortcuts의 intent에 Extra를 채우는 방법을 몰라서 Dynamic Shortcuts로 여러 개의 Intent를 만들지 못했다.
Dynamic Shortcuts에서 Static Shortcuts로 다시 설치하는 PR도 있으니 가능하면 참고하세요.
Use static shortcuts with bundle extras

최후


AppShortcuts 정보는 아직 적고 자주 넘어진다.
내가 공개한 AppShortcuts샘플 코드도 일부 실현되지 않았다.
AppShortcuts의샘플 코드를 보셨다면 이렇게 더 좋은 점이 있으면 홍보해 주세요.

좋은 웹페이지 즐겨찾기