Androidアプリ開発者のためのTips集。今回はユーザー自身の操作ではなく、アプリケーションの処理によって、ショートカットを作成し、Androidのホーム画面に配置する方法を紹介する。
用途 | 便利 |
---|---|
カテゴリ | その他 |
レベル | 中級 |
動作確認環境 | Android 2.3.3(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
Androidのホーム画面には、ユーザーの操作でいろいろなショートカットを配置できる。例えば、アプリケーション一覧の画面上でアイコンをロングタップ(長押し)することで、ホーム画面上にショートカットを配置できる。
上記の例では、“ユーザー自身の操作”によってショートカットを作成しているが、“アプリケーションの処理”によって、ショートカットをホーム画面上に配置することも可能だ。今回はその方法について詳しく紹介する。
今回紹介する方法では、アプリケーションが“勝手に”ホーム画面上にショートカットを追加してしまうので、あらかじめ「このアプリケーションは、ホーム画面にショートカットを作成しますよ」という許可が必要になる。
そこで、AndroidManifest.xmlに以下のパーミッションを宣言しておく。
<!-- ショートカット作成のパーミッション --> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
アプリケーションからショートカットを作成するための大まかな手順は、以下の通りだ。
上記の手順3.を見て分かる通り、実際には、アプリケーション自身が直接ショートカットを作成するわけではなく、システムに対してショートカットの作成を依頼することになる。以降で、2つのサンプルを紹介する。
以下に、アプリケーションのショートカット作成のサンプルを示す。
/** アプリのショートカットを作成 */ private void makeAppShortCut(Context con){ // アプリケーションを起動するためのIntentを作成 // 今回はこのアプリ自身(ShortCutTestActivity)を起動するようにした Intent targetIntent = new Intent( Intent.ACTION_MAIN ); targetIntent.setClassName( con, "jp.test.shortcut.ShortCutTestActivity" ); // ショートカットのタイトルは“APPShortCut” // アイコンにはあらかじめ作成しておいた「tips_icon.png」を使用 makeShortCut(con, targetIntent, "APPShortCut", R.drawable.tips_icon ); } /** ショートカット作成の処理 */ private void makeShortCut(Context con, Intent targetIntent, String title, int iconResource){ // ショートカット作成依頼のためのIntent Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); // ショートカットのタップ時に起動するIntentを指定 intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, targetIntent); // ショートカットのアイコンとタイトルを指定 Parcelable icon = Intent.ShortcutIconResource.fromContext(con, iconResource); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); // BroadCastを使って、システムにショートカット作成を依頼する con.sendBroadcast(intent); }
アプリケーションを起動するためのIntentのActionは、普通「Intent.ACTION_MAIN」となる。また、アイコンにはあらかじめ用意しておいた画像を使用し、タイトルには任意の名前を付ける。
システム側に対し、ショートカットの作成を依頼するためのBroadcast IntentのActionは、以下の値を使用する。
"com.android.launcher.action.INSTALL_SHORTCUT"
上記のBroadCast Intentにショートカットのタップで起動するIntent、タイトル、アイコンをセットして、BroadCastでシステムにショートカットの作成を依頼する。
実行すると、以下のように“ショートカット「XXXXXX」を作成しました”と表示され、ホーム画面上にショートカットが作成される。
作成できるショートカットは、アプリケーションのショートカットだけではない。
ショートカットとして登録するのはあくまでもIntentなので、例えば、“暗黙Intent”を使って、ブラウザで特定のWebページを開くようなショートカットを作成することも可能だ。
以下に、そのサンプルを示す。なお、makeShortCut()メソッドは、サンプル1から変更していない。
/** Webページのショートカットを作成 */ private void makeWebPageShortCut(Context con){ // ブラウザでWebページを開くためのIntentを作成 Intent targetIntent = new Intent( Intent.ACTION_VIEW ); targetIntent.setData( Uri.parse("http://monoist.atmarkit.co.jp/") ); // ショートカットのタイトルは "WebShortCut"、 // アイコンにはあらかじめ作成しておいた tips_icon.png を使用。 makeShortCut(con, targetIntent, "WebShortCut", R.drawable.tips_icon ); } /** ショートカット作成の処理 */ private void makeShortCut(Context con, Intent targetIntent, String title, int iconResource){ // ショートカット作成依頼のためのIntent Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); // ショートカットのタップ時に起動するIntentを指定 intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, targetIntent); // ショートカットのアイコンと、タイトルを指定 Parcelable icon = Intent.ShortcutIconResource.fromContext(con, iconResource); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); // BroadCast をつかって、システムにショートカット作成を依頼する con.sendBroadcast(intent); }
ショートカットのタップ時に起動するIntentを、Webページ参照用に変更した。これを実行すると、サンプル1の時と同じく、ホーム画面にショートカットが作成される。
作成されたショートカットをタップするとWebブラウザが起動し、Intentに設定したWebページが表示される。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.