Как вызвать одно приложение для Android из другого приложения для Android

Я хочу вызвать одно приложение для Android из другого приложения

Я пробовал некоторые примеры, но они не работают для меня, я получаю ошибку разбора пакета.

Рассмотрим два приложения: Application1 и Application2

Я хочу вызвать Application2 из Application1

Вот пример кода для этого:

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(fileName),"application/vnd.android.package-archive"); 
startActivity(i);

Здесь fileName = "file://data/data/package_name/files/Application1.apk";

Ответ 1

Я думаю, что этот код поможет:

Intent intent = new Intent(Intent.ACTION_RUN);
intent.setComponent(new ComponentName("<packet name>", "<class name>"));
List list = packageManager.queryIntentActivities(intent, packageManager.COMPONENT_ENABLED_STATE_DEFAULT);

if(list.size() > 0)
{
 Log.i("Log", "Have application" + list.size());
 startActivity(intent);
}
else
{
    Log.i("Log", "None application");
}

Ответ 2

Вы пытаетесь запустить приложение, которое не установлено? Похоже, вы пытаетесь выполнить приложение, передав app1 расположение файла .apk для app2 на SD-карте - это не сработает. ОС Android будет знать, как вызывать приложение2 через Intent только после того, как пользователь установил его (рассмотрите риски безопасности, если вы можете просто вызвать любой произвольный код, сидящий на SD-карте).

Предполагая, что app1 и app2 установлены, посмотрите файл AndroidManifest.xml для app2. Этот файл укажет, на что он Intent отвечает.

см. http://developer.android.com/guide/topics/intents/intents-filters.html#npex для хорошего примера.

Пожалуйста, покажите нам файл AndroidManifest.xml для приложения 2, если вам нужна дополнительная помощь.

Ответ 3

Intent i4=new Intent(Intent.ACTION_MAIN);

PackageManager manager = getPackageManager();

i4 = manager.getLaunchIntentForPackage("com.apk");//apk name

i4.addCategory(Intent.CATEGORY_LAUNCHER);

startActivity(i4);

Ответ 4

private void handleCallGooglePlay(Activity mActivity, String packageClass) {
        try {
            mActivity.startActivity(new Intent("android.intent.action.VIEW", Uri.parse("market://details?id=" + packageClass)));
        } catch (Exception var4) {
            mActivity.startActivity(new Intent("android.intent.action.VIEW", Uri.parse(package_name)));  //package name
        }
    }