Google Translate используют более 500 миллионов человек каждый месяц, переводя более чем 100 миллиардов слов каждый день.
Начиная с прошлой недели, пользователи Android, на чьих устройствах установлено Приложение Google Translate получат возможность перевода на 90 языков внутри некоторых из их любимых приложений на любом устройстве под управлением последней версии операционной системы Android (Android 6.0, Marshmallow).
Сканирование с помощью PackageManager всех пакетов, которые имеют фильтр интентов PROCESS_TEXT (например: com.google.android.apps.translate — если он установлен) и добавить их в качестве MenuItems в TextView выбора для вашего приложения
- Чтобы запросить PackageManager, сначала нужно построить Intent с Action:
private Intent createProcessTextIntent() { return new Intent() .setAction(Intent.ACTION_PROCESS_TEXT) .setType("text/plain"); }
- Затем извлечь поддерживаемые Activity
private List getSupportedActivities() { PackageManager packageManager = mTextView.getContext().getPackageManager(); return packageManager.queryIntentActivities(createProcessTextIntent(), 0); }
- Добавьте элемент для каждого найденного Activity, и присоедините Intent с Action
public void onInitializeMenu(Menu menu) { // Start with a menu Item order value that is high enough // so that your "PROCESS_TEXT" menu items appear after the // standard selection menu items like Cut, Copy, Paste. int menuItemOrder = 100; for (ResolveInfo resolveInfo : getSupportedActivities()) { menu.add(Menu.NONE, Menu.NONE, menuItemOrder++, getLabel(resolveInfo)) .setIntent(createProcessTextIntentForResolveInfo(resolveInfo)) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } }
Метки для каждого элемента можно извлечь с:
resolveInfo.loadLabel(mPackageManager);
Intent для каждого элемента может быть создан повторно для фильтра интентов, определенного ранее и добавления недостающих данных:
private Intent createProcessTextIntentForResolveInfo(ResolveInfo info) { return createProcessTextIntent() .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, ! mTextView.isTextEditable()) .setClassName(info.activityInfo.packageName, info.activityInfo.name); }
Добавление параметра перевода в меню выбора текста вашего приложения (если вы не используете поведение выделения текста в Android по умолчанию ) делается просто и занимает всего несколько дополнительных строк кода. И помните, в процессе перевода, ваше приложение должно удерживать выделение текста, пока приложение Google Translate работает.
С этой новой функцией Android Translate app пользователи смогут легко пользоваться переводом непосредственно в своих приложениях. Разработчики Android обещают добавить больше документации и примеров кода на эту функцию в ближайшие недели.