明示的インテントというやつ。
クラスを指定するやつしか知らなかったんだけど、パッケージ名だけでもいけるのを知ったので備忘録です。
まずはクラスを指定するやつ。
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にしてないです。