Запустить приложение из другого приложения на Android

Я хочу запустить установленный пакет из приложения для Android. Я предполагаю, что это возможно с использованием намерений, но я не нашел способ сделать это. Есть ли ссылка, где можно найти информацию?

Solutions Collecting From Web of "Запустить приложение из другого приложения на Android"

Если вы не знаете основную активность, то имя пакета можно использовать для запуска приложения.

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); if (launchIntent != null) { startActivity(launchIntent);//null pointer check in case package name was not found } 

Я знаю, что на это был дан ответ, но вот как я реализовал нечто подобное:

 Intent intent = getPackageManager().getLaunchIntentForPackage("com.package.name"); if (intent != null) { // We found the activity now start the activity intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { // Bring user to the market or let them choose an app? intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + "com.package.name")); startActivity(intent); } 

Еще лучше, вот способ:

 public void startNewActivity(Context context, String packageName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if (intent != null) { // We found the activity now start the activity intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } else { // Bring user to the market or let them choose an app? intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + packageName)); context.startActivity(intent); } } 

Удаленный дубликат кода:

 public void startNewActivity(Context context, String packageName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if (intent == null) { // Bring user to the market or let them choose an app? intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://details?id=" + packageName)); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } 

Я нашел решение. В файле манифеста приложения я нашел имя пакета: com.package.address и имя основного действия, которое я хочу запустить: MainActivity В следующем коде запускается следующее приложение:

 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity")); startActivity(intent); 

Вот мой пример запуска сканера штрих-кода / QR-кода из моего приложения, если кто-то считает его полезным

 Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage("com.google.zxing.client.android"); try { startActivityForResult(intent, SCAN_REQUEST_CODE); } catch (ActivityNotFoundException e) { //implement prompt dialog asking user to download the package AlertDialog.Builder downloadDialog = new AlertDialog.Builder(this); downloadDialog.setTitle(stringTitle); downloadDialog.setMessage(stringMessage); downloadDialog.setPositiveButton("yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { Uri uri = Uri.parse("market://search?q=pname:com.google.zxing.client.android"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); try { myActivity.this.startActivity(intent); } catch (ActivityNotFoundException e) { Dialogs.this.showAlert("ERROR", "Google Play Market not found!"); } } }); downloadDialog.setNegativeButton("no", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { dialog.dismiss(); } }); downloadDialog.show(); } 
 // check for the app if it exist in the phone it will lunch it otherwise, it will search for the app in google play app in the phone and to avoid any crash, if no google play app installed in the phone, it will search for the app in the google play store using the browser : public void onLunchAnotherApp() { final String appPackageName = getApplicationContext().getPackageName(); Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { onGoToAnotherInAppStore(intent, appPackageName); } } public void onGoToAnotherInAppStore(Intent intent, String appPackageName) { try { intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + appPackageName)); startActivity(intent); } catch (android.content.ActivityNotFoundException anfe) { intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName)); startActivity(intent); } } 

Если вы знаете данные и действия, на которые установлен установленный пакет, вы просто должны добавить эту информацию в свой экземпляр намерения перед его запуском.

Если у вас есть доступ к AndroidManifest другого приложения, вы можете увидеть всю необходимую информацию там.