指定したアプリを起動 – Android

明示的インテントというやつ。
クラスを指定するやつしか知らなかったんだけど、パッケージ名だけでもいけるのを知ったので備忘録です。

まずはクラスを指定するやつ。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName("com.shg25.iradachi", "com.shg25.iradachi.AboutActivity");
startActivity(intent);

setClassNameの第1引数「com.shg25.iradachi」の部分を開きたいアプリのパッケージ名を指定、第2引数の「com.shg25.iradachi.AboutActivity」の部分の表示したいActivityを指定してください。

これはリファレンスとかでもよくみる方法。
次はパッケージ名だけで開く方法。

PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.shg25.iradachi");
startActivity(intent);

これは知らんかった。
クラスを指定するのと同じで「com.shg25.iradachi」の部分で開きたいアプリのパッケージ名を指定してください。

どちらも対象のアプリがないとstartActivityでエラーが発生するので、try – catchを入れて、エラーの場合はトーストなでエラー表示するとよいと思います。

try {
    startActivity(intent);
} catch (Exception e) {
    Toast.makeText(this, "対象のアプリがありません", Toast.LENGTH_SHORT).show();
}

そんなこんなです。

参考にさせていただいた記事はこちら
パッケージ名を指定してインテントを張る方法

他にアプリを開く方法だと、
・暗黙的インテント(具体的なアプリを指定せずに「メール」とか「カメラ」とかで開く方法)
・ブラウザから起動
とかが考えられますが、ググってや。

追記:

Intentを受け取る側のアプリは直接起動するActivityクラスAndroidManifest.xmlのActivityタグにexported属性を追加してtrueにしている必要があります。

<activity
            android:name=".AboutActivity" 
            android:exported="true" />

※サンプルに記載したいらだちアプリはtrueにしてないです。