Вопрос

Работа с Android, я понял, что неявный намерен - хороший выбор в большинстве случаев из-за гибкости их. Но как насчет явных намерений? Каковы преимущества использования их? Каковы общие случаи, когда это хорошая практика для их использования?

Это было полезно?

Решение

Неявные намерения не напрямую указывают компоненты Android, которые должны быть вызваны, он только указывает действие для выполнения. URI можно использовать с неявным намерением указать тип данных.

Например

Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));

Это заставит веб-браузер открывать веб-страницу. Система Android для всех компонентов, которые зарегистрированы для конкретных действий и типа данных. Если обнаружено многие компоненты, пользователь может выбрать, какой компонент использовать.

Явные намерения используются в самом приложении, в котором одна активность может перейти на другую деятельность ... Пример Intent intent = new Intent(this,Target.class); Это вызывает переключение активности от текущего контекста целевой активности. Явные намерения также могут быть использованы для передачи данных к другому действию, используя putExtra метод и получен целевой активностью getIntent().getExtras() методы.

Надеюсь, это помогло.

Другие советы

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

  1. Явные намерения используются для вызова определенного компонента. Когда вы знаете, какой компонент вы хотите запустить, и вы не хотите предоставлять пользователю бесплатный контроль над тем, какой компонент использовать. Для примера у вас есть приложение, которое имеет 2 действия. Деятельность A и Activity B. Вы хотите запустить активность B из деятельности A. В этом случае вы определяете явную целевую целевую активность, а затем использовать его, чтобы напрямую назвать его.

  2. Неявное напряжение используется, когда у вас есть идея того, что вы хотите сделать, но вы не знаете, какой компонент должен быть запущен. Или если вы хотите дать пользователю возможность выбрать между списком компонентов для использования. Если эти намерения отправляются в систему Android, она ищет все компоненты, которые зарегистрированы для конкретных действий и типа данных. Если найден только один компонент, Android начинает компонент напрямую. Например, у вас есть приложение, которое использует камеру для фотографирования. Одной из особенностей вашего приложения является то, что вы даете пользователю возможность отправить фотографии, которые он взял. Вы не знаете, какое приложение имеет пользователь, который может отправлять фотографии, и вы также хотите дать пользователю возможность выбрать, какое внешнее приложение использовать, если у него больше, чем один. В этом случае вы не будете использовать явную намерение. Вместо этого вы должны использовать неявное намерение, которое имеет его действие, установленные на Action_Send, а его данные дополнительно установлены на URI фото.

    Явный намерение всегда доставляется до ее цели, независимо от того, что он содержит; Фильтр не консультируется. Но неявное намерение доставляется на компонент только в том случае, если он может пройти через один из фильтров компонента

1) Явная цель: Имя компонента Разработчик знает так, имя, указанное в намерении.

2) Неявное намерение: не указано компонента в намерении.

Ключ: когда вы знаете, и когда вы не знаете

Явная цель:

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

Пример: у вас есть активность списка и при нажатии элемента в списке он открывает подробную активность. В этом случае вы ЗНАТЬ что детали элемента могут быть показаны или обрабатываться DetailActivity.class вашего приложения. Поэтому для выполнения этого действия вы создаете намерение, явно указав имя класса.

Intent showDeatil = new Intent(this,DetaiActivy.class);  
startActivity(showDeatil);

Неявное намерение:

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

Пример: у вас есть ссылка. Когда вы нажимаете на ссылку, она должна открыть веб-страницу в каком-то браузере. Ты Не знаю именно какая деятельность, в которой приложение может обрабатывать ваш запрос. У вас просто есть расплывчатая идея, что это ссылка на веб-страницу, поэтому она должна открыть веб-страницу в каком-то браузере, когда кто-то его открывает. В этом случае вы просто указываете действие, а затем ОС заботятся о остальных.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);

Бонус:

Как ОС решит?

Для этого есть термин. Это называется разрешением на намерение.
В намерении разрешения.

  • ОС вынимает действие, указанное в вашем намерении.

  • Выходит в PackageManager и смотрит на все зарегистрированные мероприятия с соответствующим действием все приложение, установленное на вашем устройстве.

  • Показывает список всех подходящих приложений во всплывающем окне.

Более безопасный способ написать неявное намерение.

Иногда возможно, что не будет никакой активности, которая соответствует действию. В этом случае вы получите NullPointerexception. Так что более предпочтительный способ это

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

Как сделать ваше приложение встать в этот всплывающий список?

Допустим, вы написали немного приложения браузера. Если вы хотите, чтобы ваши приложения отображались во всплывающем списке, когда кто-то открывает ссылку. Тогда вы должны зарегистрировать свою деятельность с действием, используя Filets Filters AndroidManifest.xml. Так.

<application
    .....  >

    ......
    <activity android:name=".YourBrowserActivity">
        <action android:name="android.intent.action.VIEW" />       
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
    </activity>
 ..... 


</application>

использованная литература
Общие акции намерены и их список намерений-фильтров
Подробнее о намеренных фильтрах и разрешении намерения

От Документы:

Есть два типа намерений:

  • Явная цель Укажите компонент, чтобы начать по имени (полностью квалифицированное имя класса). Как правило, вы обычно используете явное намерение запустить компонент в вашем собственном приложении, потому что вы знаете название класса активности или услуги, которую вы хотите начать. Например, вы можете начать новую деятельность в ответ на действие пользователя или запускать службу для загрузки файла на заднем плане.
  • Неявный намерен Не называйте определенный компонент, но вместо этого объявляю общие действия для выполнения, что позволяет компоненту из другого приложения для обработки его. Например, если вы хотите показать пользователю местоположение на карте, вы можете использовать неявное намерение запросить это другое приложение для приложения, показывающее указанное место на карте.
  1. Неявное намерение - когда мы хотим вызвать компоненты системы через намерение выполнить определенную задачу, и мы на самом деле не знаем имя компонентов, которые необходимо использовать, система Android покажет желаемый список приложений для выполнения задачи.
  2. Явное намерение - когда мы хотим вызвать еще одну деятельность с полным квалифицированным названием активности и, конечно, мы знаем название деятельности.

Просто мы можем описать оба намерения, как это ..

Явные намерения: Они используются для связи между двумя видами деятельности в одном применении.

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

Неявное напряжение: Они используются для связи между двумя видами деятельности различных приложений.

Например: рассмотрим новостное приложение, которое описывает о аварии, в которой видео аварии записывается и загружается в Facebook. Нажав на ссылку, приведенную в приложении News, он направит нас к Facebook. В этом случае связь между активностью в новостном приложении и и активности в приложении Facebook. Для этой цели мы используем неявное напряжение.

Я надеюсь, что вы можете понять.

Неявное намерение

  • Это подтягивает новое приложение, не указанное, какой поднять.
  • Он указывает только действие, которое необходимо выполнить и не напрямую указывать компоненты Android.
  • URI можно использовать с неявным намерением указать тип данных.

Явная цель

  • Он подтягивает конкретное приложение и устанавливается во время записи кода.
  • Он используется в самом приложении, в котором одна активность может перейти на другую активность.
  • Используется для передачи данных к другому действию, используя дополнительный метод, и извлеките по целевой активности Getintent ().
  • Он всегда доставляется на цель, даже фильтр не консультируется.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top