Intereting Posts
Дизайн Android EditText, чтобы отобразить сообщение об ошибке, как описано в Google События TextWatcher запускаются несколько раз Определить, включен ли параметр доступности «Большой текст» на Android IntelliJ IDEA публикует приложение Android одним щелчком мыши? Активность Android без GUI Android Google Map API V2 Пустой экран Финишная активность не завершает работу? NotificationCompat 4.1 SetSmallIcon и SetLargeIcon Добавить пользовательский словарь для проверки орфографии в Android Studio Передача функции в качестве параметра в java Переключение между фрагментами с помощью функции OnNavigationItemSelected в новом шаблоне активности навигационного ящика (Android Studio 1.4) Как создать метод для метода расчета возраста в android Просмотр с горизонтальным и вертикальным панорамированием / перетаскиванием и масштабированием RecycleView отображает только первый элемент Ресурсы $ NotFoundException при использовании Robolectric с Gradle

Откройте другое приложение с вашего собственного (намеренного)

Я знаю, как обновлять свои собственные программы, и я знаю, как открывать программы, используя предопределенный Uri (например, для смс или электронной почты)

Мне нужно знать, как я могу создать намерение открыть MyTracks или любое другое приложение, которое я не знаю, какие намерения они слушают.

Я получил эту информацию от DDMS, но я не добился успеха в том, чтобы превратить это в намерение, которое я могу использовать. Это берется при открытии MyTracks вручную.

Спасибо за вашу помощь

05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] } 05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015} 05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms) 

Solutions Collecting From Web of "Откройте другое приложение с вашего собственного (намеренного)"

Во-первых, понятие «приложение» в Android немного расширенное.

Приложение – технически процесс – может иметь несколько действий, услуг, поставщиков контента и / или широковещательных слушателей. Если хотя бы один из них запущен, приложение запускается и запускается (процесс).

Итак, что вам нужно определить, как вы хотите «запустить приложение».

Хорошо … вот что вы можете попробовать:

  1. Создайте намерение с action=MAIN и category=LAUNCHER
  2. Получите PackageManager из текущего контекста, используя context.getPackageManager
  3. packageManager.queryIntentActivity(<intent>, 0) где у цели есть category=LAUNCHER , action=MAIN или packageManager.resolveActivity(<intent>, 0) чтобы получить первое действие с помощью main / launcher
  4. Получить интересующую вас информацию ActivityInfo
  5. Из ActivityInfo получите имя packageName и name
  6. Наконец, создайте еще одно намерение с помощью category=LAUNCHER , action=MAIN , componentName = new ComponentName(packageName, name) и setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  7. Наконец, context.startActivity(newIntent)

Я работаю так,

 /** Open another app. * @param context current Context, like Activity, App, or Service * @param packageName the full package name of the app to open * @return true if likely successful, false if unsuccessful */ public static boolean openApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent i = manager.getLaunchIntentForPackage(packageName); if (i == null) { return false; //throw new PackageManager.NameNotFoundException(); } i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } 

Пример использования:

 openApp(this, "com.google.android.maps.mytracks"); 

Надеюсь, это поможет кому-то.

  Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks")); intent.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(intent); 

РЕДАКТИРОВАТЬ :

Как предлагается в комментариях, добавьте одну строку до startActivity(intent);

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Если у вас уже есть имя пакета, которое вы хотите активировать, вы можете использовать следующий код, который является более общим:

 PackageManager pm = context.getPackageManager(); Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName); if (null != appStartIntent) { context.startActivity(appStartIntent); } 

Я обнаружил, что он работает лучше для случаев, когда основное действие не было обнаружено обычным методом запуска основной деятельности.

Это код моей базы решений на решении MasterGaurav:

 private void launchComponent(String packageName, String name){ Intent launch_intent = new Intent("android.intent.action.MAIN"); launch_intent.addCategory("android.intent.category.LAUNCHER"); launch_intent.setComponent(new ComponentName(packageName, name)); launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(launch_intent); } public void startApplication(String application_name){ try{ Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveinfo_list = activity.getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info:resolveinfo_list){ if(info.activityInfo.packageName.equalsIgnoreCase(application_name)){ launchComponent(info.activityInfo.packageName, info.activityInfo.name); break; } } } catch (ActivityNotFoundException e) { Toast.makeText(activity.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show(); } } 

Используя решение от inversus, я расширил фрагмент с помощью функции, которая будет вызываться, когда требуемое приложение не будет установлено в данный момент. Таким образом, он работает так: Запустите приложение по имени пакета. Если не найден, откройте Android-рынок – Google для этого пакета .

 public void startApplication(String packageName) { try { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info : resolveInfoList) if(info.activityInfo.packageName.equalsIgnoreCase(packageName)) { launchComponent(info.activityInfo.packageName, info.activityInfo.name); return; } // No match, so application is not installed showInMarket(packageName); } catch (Exception e) { showInMarket(packageName); } } private void launchComponent(String packageName, String name) { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.setComponent(new ComponentName(packageName, name)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } private void showInMarket(String packageName) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } 

И он используется следующим образом:

 startApplication("org.teepee.bazant"); 

Откройте приложение, если оно существует, или откройте приложение Play Store для его установки:

 private void open() { openApplication(getActivity(), "com.app.package.here"); } public void openApplication(Context context, String packageN) { Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN); if (i == null) { i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); } else { try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } } } 

Использовать это :

  PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("com.package.name"); startActivity(intent); 

Запустить другую активность приложения из моего приложения «Активность». Это отлично работает для меня.

Ниже код будет работать, если другое приложение уже установлено на вашем телефоне, иначе невозможно перенаправить одно приложение в другое приложение. Убедитесь, что ваше приложение запущено или нет.

 Intent intent = new Intent(); intent.setClassName("com.xyz.myapplication", "com.xyz.myapplication.SplashScreenActivity"); startActivity(intent); 

// Это работает на Android Lollipop 5.0.2

 public static boolean launchApp(Context context, String packageName) { final PackageManager manager = context.getPackageManager(); final Intent appLauncherIntent = new Intent(Intent.ACTION_MAIN); appLauncherIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> resolveInfos = manager.queryIntentActivities(appLauncherIntent, 0); if ((null != resolveInfos) && (!resolveInfos.isEmpty())) { for (ResolveInfo rInfo : resolveInfos) { String className = rInfo.activityInfo.name.trim(); String targetPackageName = rInfo.activityInfo.packageName.trim(); Log.d("AppsLauncher", "Class Name = " + className + " Target Package Name = " + targetPackageName + " Package Name = " + packageName); if (packageName.trim().equals(targetPackageName)) { Intent intent = new Intent(); intent.setClassName(targetPackageName, className); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); Log.d("AppsLauncher", "Launching Package '" + packageName + "' with Activity '" + className + "'"); return true; } } } return false; } 

Поскольку приложениям не разрешено изменять многие параметры телефона, вы можете открыть активность настроек так же, как и другое приложение.

Посмотрите на результат LogCat после фактического изменения настройки вручную:

 INFO/ActivityManager(1306): Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.DevelopmentSettings } from pid 1924 

Затем используйте это, чтобы отобразить страницу настроек из вашего приложения:

 String SettingsPage = "com.android.settings/.DevelopmentSettings"; try { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString(SettingsPage)); intent.addCategory(Intent.CATEGORY_LAUNCHER ); startActivity(intent); } catch (ActivityNotFoundException e) { log it } 

Для уровня API 3+ не более одной строки кода:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("name.of.package");

Верните запуск CATEGORY_INFO Intent (приложения без активности запуска, например, обои, часто используют это, чтобы предоставить некоторую информацию о приложении), и, если его не найти, возвращает CATEGORY_LAUNCH пакета, если он существует.

Если вы пытаетесь запустить SERVICE, а не активность, это сработало для меня:

 Intent intent = new Intent(); intent.setClassName("com.example.otherapplication", "com.example.otherapplication.ServiceName"); context.startService(intent); 

Если вы используете метод intent.setComponent (…), как указано в других ответах, вы можете получить предупреждение «Неявные намерения с startService небезопасными».

Кроме того, вы также можете открыть намерение своего приложения в другом приложении:

 Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Где uri является debplink для другого приложения

Используйте следующее:

 String packagename = "com.example.app"; startActivity(getPackageManager().getLaunchIntentForPackage(packagename)); 

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

  Intent launchIntent = getActivity.getPackageManager().getLaunchIntentForPackage("com.ionicframework.uengage"); startActivity(launchIntent); 

Использование намерения для другого действия. Эта ссылка очень полезна для использования намерения для одной страницы для

Другая страница.

http://blogingtutorials.blogspot.com/2010/11/using-intent-in-android-one-page-to.html

Если возникнут какие-либо трудности, пришлите мне обратную связь. Я решаю эту проблему.

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

  String packageN = "aman4india.com.pincodedirectory"; Intent i = getPackageManager().getLaunchIntentForPackage(packageN); if (i != null) { i.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(i); } else { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } } 
 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("package_name","package_name.class_name")); intent.putExtra("grace", "Hi"); startActivity(intent);