読者です 読者をやめる 読者になる 読者になる

Zinc #24 ショートカットの作成

現在表示しているWebページのショートカットをホーム画面に作成する・・・。

まず、menu_main.xmlは、

メニューアイテムaction_make_shortcutを追加・・・。

strings.xmlで、

"ショートカットの作成"という表示名に・・・。

MainActivity.javaでは、

WebViewのwvからtitleとurlを取得・・・。

urlがあったら、まずこのアプリを起動してURLのWebページを表示するためのインテントlauncherIntentを作成・・・。
Intent.ACTION_VIEWはデータを表示する時(今回はURLのWebページを表示するから)、Intent.CATEGORY_DEFAULTはデフォルト(これがないと暗黙的なIntentに引っかからない)、setClassNameではパッケージ名とクラス名を指定する・・・。
Intent.EXTRA_TEXTというキーでtitleをセット・・・。urlはUri.parseしてsetDataに渡す・・・。

これに合わせたintent-filterをAndroidManifest.xmlに追加しておく・・・。

次にショートカットを作成するインテントを作成・・・。
Intent.EXTRA_SHORTCUT_INTENTに先ほど作成したlauncherIntent、Intent.EXTRA_SHORTCUT_NAMEはtitleにしておこう・・・。
Intent.EXTRA_SHORTCUT_ICON_RESOURCEにはアイコンリソースを渡すが、R.mipmap.ic_launcherからiconResourceを作っている・・・。
アクションにはショートカットの作成を表す文字列
"com.android.launcher.action.INSTALL_SHORTCUT"を指定・・・。
ショートカットの作成にはAndroidManifest.xmlに、

これを追加する必要がある・・・。

最後にshortcutIntentをsendBroadcastで送る・・・。
そうすると、ショートカットが作成される・・・。

あとは起動したときにインテントを取得して、URLのページを表示すればいいのだが、実はここが厄介・・・。

アプリを戻るで閉じてからショートカットで起動した場合、アクティビティを新たに生成するのでonCreate・・・。
この時はgetIntentでIntentを取得し、URIやgetStringExtraなどのパラメータを取得できる・・・。

onCreateの場合、

こんな感じでintentから取得したurlなどをargsを通じてonCreateViewの処理に渡す・・・。
でそちら側でwebViewの初期表示処理をする・・・。

しかし、アプリをホームで非表示にしてから起動した場合、再表示なのでonCreateには来ない・・・。
しかたなくonStartやonResumeでgetIntentしたが、URIやパラメータを取得できない・・・。

いろいろ探してみたが、

Androidアプリ開発メモ048:onNewIntent(): ぷ~ろぐ

既存のアクティビティの再表示にはonNewIntentが呼ばれるらしい・・・。
幸いSingleTopにしてるし・・・。
で、この引数のintentにはURIやパラメータがちゃんと格納されていた・・・。
(そのあとのonResumeなどでgetIntentしても取れないので注意・・・。)

onNewIntentの場合、

このようにonNewIntentで新しいタブを追加し、urlなどをargsを通じてonCreateViewの処理に渡す・・・。
ただ、tabHost.addTabだけではWebViewTabFragmentは生成されないので、tabHost.setCurrentTabで追加したタブを表示するように・・・。

WebViewTabFragment.javaのonCreateViewでは、

urlが取得出来たら、

webView.loadUrlでurlをロード・・・。
urlBarへのセットも忘れず・・・。

f:id:BG1:20160728174541p:plain

最初、この状態・・・。

f:id:BG1:20160728174604p:plain

まずはYahooトップ・・・。

f:id:BG1:20160728174626p:plain

新しいタブで、

f:id:BG1:20160728174643p:plain

2つ目はスポナビ・・・。

f:id:BG1:20160728174809p:plain

ここで"ショートカットの作成"でスポナビのショートカットを作成・・・。

f:id:BG1:20160728175252p:plain

こんなのが表示される場合もあるし、そうでない場合もある・・・。

f:id:BG1:20160728175350p:plain

また新しいタブ・・・。

f:id:BG1:20160728175427p:plain

3つ目はファイナンス・・・。

ここでホームボタンで隠す・・・。

f:id:BG1:20160728175608p:plain

"スポーツナビ"というショートカットが出来てるのでこれを押す・・・。

f:id:BG1:20160728175727p:plain

4つ目のタブが新しく出来て、スポナビが表示された・・・。

f:id:BG1:20160728180048p:plain

今度は戻るボタンで閉じてから、ショートカットを押す・・・。

f:id:BG1:20160728180203p:plain

新しいタブ1だけになり、そこにスポナビが表示される・・・。

https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc