1. ホーム
  2. android

[解決済み] 別のアプリケーションでアクティビティを開始するには?

2023-07-14 15:28:57

質問

以下のように定義されたアプリケーションAを持っています。

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name="com.example.MyExampleActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

さて、アプリケーションBで、アプリケーションAのアクティビティを開始するコードはどのように書けばいいのでしょうか?ありがとうございます。

どのように解決するには?

Permission Denial: starting Intent..." エラーに直面した場合、またはアプリの起動中に理由なくクラッシュした場合、マニフェストで次の 1 行コードを使用します。

android:exported="true"

finish();に注意してください、それを逃すとアプリがフリーズします。

finish();

他の解決策は、同じアプリケーションにある2つのアクティビティに対してのみ機能します。私の場合、アプリケーションBはクラス com.example.MyExampleActivity.class を知らないので、コンパイルに失敗します。

Webで検索したところ、以下のようなものが見つかり、うまくいきました。

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example", "com.example.MyExampleActivity"));
startActivity(intent);

setClassNameメソッドを使うこともできます。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.hotfoot.rapid.adani.wheeler.android", "com.hotfoot.rapid.adani.wheeler.android.view.activities.MainActivity");
startActivity(intent);
finish();

また、あるアプリから別のアプリに値を渡すこともできます。

Intent launchIntent = getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.hotfoot.rapid.adani.wheeler.android.LoginActivity");
if (launchIntent != null) {
    launchIntent.putExtra("AppID", "MY-CHILD-APP1");
    launchIntent.putExtra("UserID", "MY-APP");
    launchIntent.putExtra("Password", "MY-PASSWORD");
    startActivity(launchIntent);
    finish();
} else {
    Toast.makeText(getApplicationContext(), " launch Intent not available", Toast.LENGTH_SHORT).show();
}