Как скрыть окно Intent Chooser в Android? - PullRequest
4 голосов
/ 21 мая 2010

Когда я нажимаю кнопку, я начинаю занятие для видео на YouTube, например:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));

если я использую его, он перенаправляет его в средство выбора намерений, чтобы открыть этот URL-адрес видео в браузере или приложении YouTube Как выбрать приложение по умолчанию как YouTube программно?

мой вывод должен открывать это видео прямо на плеере YouTube. как? есть идеи?

Ответы [ 2 ]

7 голосов
/ 13 июля 2011

Запрашивать определенную активность рискованно, поскольку YouTube может изменить название своего пакета, что приведет к взлому вашего приложения.

Также - нет гарантии, что YT-плеер установлен на всех устройствах Android.

Чтобы обойти, вот код, который ищет активность на YouTube. Если он находит его, он возвращает намерение использовать его напрямую, в противном случае он сохраняет «общее» намерение, которое приведет к отображению средства выбора системного намерения.

/**
 * @param context
 * @param url To display, such as http://www.youtube.com/watch?v=t_c6K1AnxAU
 * @return an Intent to start the YouTube Viewer. If it is not found, will
 *         return a generic video-play intent, and system will display a
 *         chooser to ther user.
 */
public static Intent getYouTubeIntent(Context context, String url) {
  Intent videoIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  final PackageManager pm = context.getPackageManager();
  List<ResolveInfo> activityList = pm.queryIntentActivities(videoIntent, 0);
  for (int i = 0; i < activityList.size(); i++) {
    ResolveInfo app = activityList.get(i);
    if (app.activityInfo.name.contains("youtube")) {
      videoIntent.setClassName(app.activityInfo.packageName, app.activityInfo.name);
      return videoIntent;
    }
  }
  return videoIntent;
}
1 голос
/ 21 мая 2010

Вы используете неявное намерение, которое может соответствовать более чем одному получателю, таким образом, выбирающему. Вы можете попробовать переключиться на модель с явным намерением, если сможете выяснить, как нацелить деятельность на YouTube напрямую. См. документация для разработчиков о явных и неявных намерениях.

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

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

Intent intent = new Intent(this, YouTubeViewerActivity.class);
intent.addExtra("URI", Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM"));
startActivity(intent);

Тем не менее, я полностью придумал, что есть класс YouTubeViewerActivity. Как я уже сказал, обычно, если вы просите какую-либо внешнюю службу, например приложение YouTube, выполнить действие, вы используете модель неявного намерения, как у вас, чтобы пользователь мог контролировать, какое приложение используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...