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


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.