Я знаю, как обновлять свои собственные программы, и я знаю, как открывать программы, используя предопределенный URI (например, для sms или электронной почты)
Мне нужно знать, как создать намерение для открытия 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)
источник
onCreate
=>Bundle extras = getIntent().getExtras()
=> иif(extras != null) { extras.getString("blah") }
т. д.getPackageManager().getLaunchIntentForPackage()
уже делает все это за вас github.com/android/platform_frameworks_base/blob/master/core/…Я так работаю,
/** 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 ActivityNotFoundException(); } i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); return true; } catch (ActivityNotFoundException e) { return false; } }
Пример использования:
openApp(this, "com.google.android.maps.mytracks");
Надеюсь, это кому-то поможет.
источник
getLaunchIntentForPackage
вызова.getLaunchIntentForPackage()
уже добавляет категорию, см. источник: github.com/android/platform_frameworks_base/blob/master/core/…Context
объект, где / как его получить / создать? И какие пакеты импортировать. Новое в Java для разработки под Android.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);
источник
Если у вас уже есть имя пакета, который вы хотите активировать, вы можете использовать следующий код, который является немного более общим:
Я обнаружил, что это лучше работает в тех случаях, когда основное действие не было обнаружено обычным методом запуска ОСНОВНОГО действия.
источник
Это код моей базы решения на основе решения 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 Market - Google play для этого пакета .
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");
источник
Использовать это :
PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("com.package.name"); startActivity(intent);
источник
Откройте приложение, если оно существует, или откройте приложение 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))); } } }
источник
Чтобы запустить другое действие приложения из моего действия приложения. У меня все работает нормально.
Приведенный ниже код будет работать, если другое приложение уже установлено на вашем телефоне, в противном случае невозможно перенаправить из одного приложения в другое, поэтому убедитесь, что ваше приложение запущено или нет.
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 (приложения без активности запуска, например, обои часто используют это для предоставления некоторой информации о приложении) и, если его не находят, возвращает CATEGORY_LAUNCH пакета, если он существует.
источник
Если вы пытаетесь запустить СЛУЖБУ, а не действие, это сработало для меня:
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
ссылка на другое приложениеисточник
Используйте следующее:
String packagename = "com.example.app"; startActivity(getPackageManager().getLaunchIntentForPackage(packagename));
источник
Запустить приложение из другого приложения на Android
Intent launchIntent = getActivity.getPackageManager().getLaunchIntentForPackage("com.ionicframework.uengage"); startActivity(launchIntent);
источник
Если вы хотите открыть другое приложение, но оно не установлено, вы можете отправить его в Google App Store для загрузки.
Сначала создайте метод openOtherApp, например
public static boolean openOtherApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent intent = manager.getLaunchIntentForPackage(packageName); if (intent == null) { //the app is not installed try { intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + packageName)); context.startActivity(intent); } catch (ActivityNotFoundException e) { //throw new ActivityNotFoundException(); return false; } } intent.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(intent); return true; } catch (ActivityNotFoundException e) { return false; } }
2.- Использование
openOtherApp(getApplicationContext(), "com.packageappname");
источник
Попробуйте этот код, надеюсь, это вам поможет. Если этот пакет доступен, это откроет приложение или откроет игровой магазин для загрузок
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))); } }
источник
Вы можете использовать эту команду, чтобы найти имена пакетов, установленных на устройстве:
adb shell pm list packages -3 -f
Ссылка: http://www.aftvnews.com/how-to-determine-the-package-name-of-an-android-app/
источник
Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("package_name","package_name.class_name")); intent.putExtra("grace", "Hi"); startActivity(intent);
источник