Как начать деятельность в другом приложении? - PullRequest
72 голосов
/ 05 февраля 2010

У меня есть приложение 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? Спасибо!

Ответы [ 2 ]

137 голосов
/ 05 февраля 2010

Если вы, ребята, сталкиваетесь с ошибкой «Отказ в разрешении: запуск намерения ...» или если приложение без сбоев во время запуска приложения - используйте этот однострочный код в манифесте

android:exported="true"

Пожалуйста, будьте осторожны с отделкой (); , если вы пропустили его, приложение зависает. если упомянуто, приложение было бы гладким пусковым устройством.

finish();

Другое решение работает только для двух действий, которые находятся в одном приложении. В моем случае приложение B не знает класс com.example.MyExampleActivity.class в коде, поэтому компиляция завершится неудачей.

Я искал в Интернете и нашел что-то вроде этого ниже, и это хорошо работает.

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();
}
16 голосов
/ 05 января 2014

Если оба приложения имеют одинаковую подпись (это означает, что оба приложения принадлежат вам и подписаны одним и тем же ключом), вы можете вызвать другое действие вашего приложения следующим образом:

Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(CALC_PACKAGE_NAME);
startActivity(LaunchIntent);

Надеюсь, это поможет.

...