запустити програму, знаючи назву пакета


77

Хтось може сказати мені, як запустити нову програму, знаючи лише її назву? Я не маю інформації про те, яка діяльність є основною.

Відповіді:


96

Спробуйте використовувати PackageManagerіgetLaunchIntentForPackage()


Сер, чому я не можу запустити Launcher, отримавши назву пакета, що надає виняток java.lang.NullPointer?
— TechArcSri

Запускає абсолютно новий екземпляр? Я хочу запустити існуючу. Як це зробити?
— JohnyTex

Я б додав прапори (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED), щоб переконатися, що стан програми однаковий, якщо його вже було відкрито.
— JacksOnF1re

У мене виникла проблема, коли я намагався передати додатки цільовому додатку. Тільки якщо процес цільової програми не існує, він може отримати додаткові послуги, інакше він нічого не отримає.
— Аллен Ворк

151

Просто використовуйте наступні два рядки, щоб ви могли запустити будь-яку встановлену програму, package nameвідому їй:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.abc");
startActivity( launchIntent );

Якщо ви не знаєте назви пакету програми, яку хотіли запустити, спробуйте свої сили

PackageManager pm;
pm = getPackageManager();
//  get a list of installed apps.
packages = pm.getInstalledApplications(0);

Для отримання додаткової інформації зверніться за цим посиланням за допомогою Package Manager


1
Це запускає абсолютно новий екземпляр? Я хочу запустити існуючу. Як це зробити?
— JohnyTex

@hohny tex ви знаходите рішення для своєї проблеми
— Менна-Аллах Самі

@JohnyTex Я знаю, що це запізно, але ти можеш спробувати LaunchIntent.setFlags("Intent.FLAG_ACTIVITY_NEW_TASK");іLaunchIntent.setFlags("Intent.FLAG_ACTIVITY_SINGLE_TOP");
— KISHORE_ZE

18

Ви можете отримати намір запуску через PackageManagerклас:

PackageManager pm = context.getPackageManager();
Intent launchIntent = pm.getLaunchIntentForPackage("com.example.package");
context.startActivity(launchIntent);

Зверніть увагу, що getLaunchIntentForPackageповертає значення null, якщо пакет не знайдено. Тож ви можете додати нульову перевірку:

if (launchIntent != null) {
    context.startActivity(launchIntent);
} else {
    Toast.makeText(context, "Package not found", Toast.LENGTH_SHORT).show();
}

Ця відповідь лише трохи відрізняється від старих відповідей, за винятком того, що вона на 3 роки новіша. Я не бачу, як виправдані голоси.
— hBrent

Але принаймні він повідомив, що метод повертає null, якщо немає пакету, я збирався спробувати зловити активність, не знайдену винятком. @ HBrent
— Xenolion

1
Intent intent;                                        
PackageManager pm = getActivity().getPackageManager();

intent = pm.getLaunchIntentForPackage("com.package.name");                       
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.