2010-02-05 2 views
59

Я приложение А определяется, как показано ниже:Как начать работу в другом приложении?

<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, как я могу написать код, чтобы начать деятельность в приложении А? Благодаря!

ответ

116

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

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

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

Рад видеть этот ответ! Однако, в моем случае (Android 4.2), я получил ошибку «Разрешение отказа: начало Intent ...». Любая подсказка? – JackWM

+8

@JackWM добавить android: exported = "true" к вашему свойству активности –

+3

@JackWM он также будет работать, если в активности, которую вы пытаетесь запустить, есть фильтр намерений. Это связано с тем, что значение по умолчанию для XML-атрибута 'android: exported' является' true', когда присутствует фильтр намерений. –

12

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

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

Надеется, что это помогает.

+5

Вам не нужно, чтобы оба приложения имели одну и ту же подпись. Вы можете, например, запустить Google Maps с помощью этого: Intent i = getPackageManager(). GetLaunchIntentForPackage («com.google.android.apps.maps»); –

+0

@TimAutin Что делать, если мне нужно запустить определенную активность, принадлежащую к приложению, у меня нет контроля? – Epicality

+0

Мне никогда не приходилось это делать, поэтому я не знаю. Вы попробовали этот ответ https://stackoverflow.com/a/2210073/1356106? –

Смежные вопросы