アプリ間をIntentでつなぐ

AndroidアプリはIntentを使ってアプリを切り替えることができます。

画面ではなくアプリを遷移します、できると知って感動しました

今回やりたいこと

今回作るのはアプリAからアプリBにボタンを押して切り替える単純なアプリです。イメージとしてはこんな感じ。

Intentの作成

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.example.harumi_sagawa.b", "com.example.harumi_sagawa.b.PepperActivity");
startActivity(intent);

インテントを投げる部分はすごくシンプルです。setClassNameの部分にはパッケージ名、アクティビティ名を指定します。これだけ。

コード

両方のActivityのコードを貼っておきます。
AとB違う方法でエラーハンドリングをしています。参考までに

アプリAのActivity

public class MainActivity extends AppCompatActivity {
Button button;
private static final int REQUESTCODE_TEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.myBtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.example.harumi_sagawa.b", "com.example.harumi_sagawa.b.PepperActivity");
startActivity(intent);
}catch (ActivityNotFoundException e){
button.setText("アプリがインストールされていません");
}

}
});
}
}

アプリBのActivity

public class PepperActivity extends AppCompatActivity {
Button button;
Boolean appInstall;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pepper);

appInstall = isAppInstalled("com.example.harumi_sagawa.a");

button = findViewById(R.id.myBtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (appInstall) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.example.harumi_sagawa.a", "com.example.harumi_sagawa.a.MainActivity");
startActivityForResult();
startActivity(intent);
} else {
button.setText("アプリがインストールされていません");
}
}


private void startActivityForResult() {
}
});
}

public boolean isAppInstalled(String appPackage) {
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(appPackage);
return (intent != null);
}
}

動画