アプリがインストールされたときに自動でホームにアイコンを作成する方法について。
Kotlinのコードはこちら
パーミッションの設定
ショートカットを作成するにはcom.android.launcher.permission.INSTALL_SHORTCUTの権限が必要だ。
AndroidManifest.xmlの
AndroidManifest.xml:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
処理
アプリを起動するショートカットを作成する処理はMainActivityのonCreateに記述するのが一般的だと思う。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ショートカットを作成する関数を呼び出す
createShortcut();
}
ショートカットを作成する処理は次の流れで作成した。
- アプリの起動情報をもったインテントを作成→起動インテント
- アイコンのインテントを作成し、そのアクションに起動インテントをセットする
- sendBroadcast()でアイコンインテントを送信し、スクリーンに登録
消しても消しても、起動の度にショートカットを作成するアプリはうざいので最初の1回だけショートカットを作成するようにする。
そのためにSharedPreferencesを使う。
アプリを起動するショートカットを作成する処理:
// ショートカットを作成する関数
private void createShortcut(){
// 1回だけ作成
SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);
if(!preference.getBoolean("shortcut",false)) {
// アプリを起動するインテント
Intent launcherIntent = new Intent();
launcherIntent.setClass(this, MainActivity.class);
launcherIntent.setAction(Intent.ACTION_MAIN);
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// ショートカットインテント用のアイコンを取得
Intent.ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher);
// ショートカット用インテント
Intent shortcutIntent = new Intent();
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "ショートカットタイトル");
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); // アイコン画像セット
shortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutIntent.putExtra("duplicate", false); // ショートカットを重複して作らない
// ショートカットの作成
preference.edit().putBoolean("shortcut", true).commit();
sendBroadcast(shortcutIntent);
}
}