連載
» 2012年03月16日 10時34分 UPDATE

Android Tips(10):ホーム画面上にショートカットを作成する

Androidアプリ開発者のためのTips集。今回はユーザー自身の操作ではなく、アプリケーションの処理によって、ショートカットを作成し、Androidのホーム画面に配置する方法を紹介する。

[秋本耕平(イーフロー),@IT MONOist]
Android Tips

Tips概要と動作検証環境

用途 便利
カテゴリ その他
レベル 中級
動作確認環境 Android 2.3.3(GingerBread) エミュレータにて動作確認
備考 今回のTipsは上記環境で動作確認・検証を行っています


Tips 10:ホーム画面にショートカットを作成する

 Androidのホーム画面には、ユーザーの操作でいろいろなショートカットを配置できる。例えば、アプリケーション一覧の画面上でアイコンをロングタップ(長押し)することで、ホーム画面上にショートカットを配置できる。

 上記の例では、“ユーザー自身の操作”によってショートカットを作成しているが、“アプリケーションの処理”によって、ショートカットをホーム画面上に配置することも可能だ。今回はその方法について詳しく紹介する。

ショートカット作成のためのパーミッション

 今回紹介する方法では、アプリケーションが“勝手に”ホーム画面上にショートカットを追加してしまうので、あらかじめ「このアプリケーションは、ホーム画面にショートカットを作成しますよ」という許可が必要になる。

 そこで、AndroidManifest.xmlに以下のパーミッションを宣言しておく。

ショートカット作成のパーミッション:

    <!-- ショートカット作成のパーミッション -->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />


ショートカット作成の手順

 アプリケーションからショートカットを作成するための大まかな手順は、以下の通りだ。

  1. ショートカットをタップした時に起動するIntentを作成
  2. ショートカットのタイトル、アイコンリソースを指定
  3. Broadcast Intentを使用して、システムにショートカットの作成を依頼

 上記の手順3.を見て分かる通り、実際には、アプリケーション自身が直接ショートカットを作成するわけではなく、システムに対してショートカットの作成を依頼することになる。以降で、2つのサンプルを紹介する。

サンプル1:アプリケーションのショートカットを作成する

 以下に、アプリケーションのショートカット作成のサンプルを示す。

例:アプリケーションのショートカット作成のサンプル

    /** アプリのショートカットを作成 */
    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」を作成しました”と表示され、ホーム画面上にショートカットが作成される。

アプリケーションのショートカット作成 画像1 実行結果(1):アプリケーションのショートカット作成
ホーム画面にショートカットが作成される 画像2 実行結果(2):ホーム画面にショートカットが作成される

サンプル2:Webページのショートカットを作成する

 作成できるショートカットは、アプリケーションのショートカットだけではない。

 ショートカットとして登録するのはあくまでもIntentなので、例えば、“暗黙Intent”を使って、ブラウザで特定のWebページを開くようなショートカットを作成することも可能だ。

 以下に、そのサンプルを示す。なお、makeShortCut()メソッドは、サンプル1から変更していない。

例:Webページのショートカット作成のサンプル

    /** 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ページのショートカット作成 画像3 実行結果(1):Webページのショートカット作成
ホーム画面にショートカットが作成される 画像4 実行結果(2):ホーム画面にショートカットが作成される

 作成されたショートカットをタップするとWebブラウザが起動し、Intentに設定したWebページが表示される。

Intentに設定したWebページが表示される 画像5 Intentに設定したWebページが表示される

Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


Copyright© 2017 ITmedia, Inc. All Rights Reserved.