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