Подтвердить что ты не робот

В чем разница между Явным и неявным вызовом активности в android?

В чем разница между явным и неявным вызовом активности в android? Если вы объясните ответ простым примером, это будет хорошо.

4b9b3361

Ответ 1

Например:

неявный вызов активности

В фильтре намерений вы создаете действие для своей активности, поэтому другое приложение может вызывать вашу активность с помощью этого действия следующим образом:

<activity android:name=".BrowserActivitiy" android:label="@string/app_name">
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http"/> 
   </intent-filter>
</activity>

И другой способ вызвать неявное намерение ниже:

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

Явный вызов активности

Вы делаете звонок, который точно указывает, какой класс деятельности:

Intent intent = new Intent(this, ActivityABC.class);
i.putExtra("Value", "This value for ActivityABC");
startActivity(intent);

Надеюсь, что это поможет вам понять больше о явном и неявном вызове активности в Android.

Вы можете получить более подробную информацию об Android Intent здесь

Ответ 2

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

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

Ответ 3

См. разрешение на выполнение здесь

http://developer.android.com/guide/topics/intents/intents-filters.html

Явные намерения (действия) относятся к определенному классу и, в общем, доступны только вашим пакетам. Неявные намерения относятся к фильтрам намерений, в которых приложения публично объявляют, что могут обрабатывать определенные типы данных или могут предоставлять конкретные услуги, например. Отправить письмо. При неявных намерениях пользователи выбирают, какую активность (как правило, пакет) использовать для обработки намерения или если установлен обработчик по умолчанию, он запускается.

Ответ 4

Существует два типа намерений:

  • Явное намерение:

    При создании объекта Intent, когда мы явно указываем и передаем имя целевого компонента непосредственно в намерении, его явное намерение.

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

    В этом случае мы делегируем задачу оценки зарегистрированных компонентов (регистрация обычно выполняется с использованием фильтров намерений, которые хорошо охватывают позже) для Android на основе данных о намерениях и предполагаемых действиях (например, отправка электронной почты, сбор фотографий, вывод местоположение на карте и т.д.), которые мы проходим. Таким образом, Android автоматически активирует компонент из того же приложения или другого приложения, которое может обрабатывать сообщение/задание намерения. Идея в этом случае заключается в том, что, скажем, нам нужно привязать место на map, для этого нам не нужно кодировать нашу собственную деятельность, чтобы справиться с этим. Вместо этого просто передайте данные о местоположении в приложение, такое как карты Google, которые могут выполнять работу в интересах наших приложений.

источник: http://codetheory.in/android-intents/

Ответ 5

Когда использовать что?

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

Intent i = new Intent(context,DetailActivity.class);  // DetailActivity.class is the component name
startActivity(i);

Неявное намерение: если вы не знаете, какое приложение может обработать ваш запрос, тогда вы упоминаете действие намеренно и позволяете ОС решать, какое приложение/приложения подходят для вашей задачи.

Пример: воспроизведение музыки

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(file);
startActivity(intent);

Как решает ОС?

Когда есть неявный вызов с намерением, ОС выполняет действие и затем сопоставляет его со всеми фильтрами намерений всех зарегистрированных действий всех приложений, использующих PackageManager, а затем заполняет результат в виде списка. Это называется намеренным разрешением
Таким образом, существует вероятность того, что на вашем устройстве нет приложения, которое могло бы обработать ваш запрос. В этом случае вы получите исключение NullPointer.

Таким образом, более безопасный способ вызвать неявное намерение было бы это

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

Ответ 6

Каждый раз, когда я запутываюсь среди них в любом интервью. Итак, я резюмировал это следующим образом, пусть это поможет кому-то иметь в виду эту разницу.

Резюме:

В Implicit Intents пользователь неявно говорит системе, ЧТО должно быть сделано, без указания того, кто должен делать.

В "Явных намерениях" пользователь явно указывает системе, КОГО следует запускать для выполнения любой работы.