2014-10-23 2 views
2

Обсуждая о Android Security вопрос поднял, и мы не смогли найти разумный ответ (может быть, наивные вопросы):Каково использование явных намерений между различными приложениями в среде Android?

  1. Почему андроид Application декларировать деятельности/приемник/услугу в манифесте без намерения фильтра и с тегом exported = true?
  2. Как другое приложение может отправить явное намерение получателю, указанному выше? Пожалуйста, дайте пример кода, если возможно .
  3. Каковы последствия этого?

Пример найдено на применении манифестов: пакет = "com.google.android.youtube" Применение: андроид: имя = "com.google.android.apps.youtube.app.YouTubeApplication" Приемник: андроид : имя = «com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14 $ RemoteControlIntentReceiver» андроид: экспортироваться = «истинный»

ответ

2

объяснение для примера вы дали довольно легко. Пример, который вы указали для компонента BroadcastReceiver. Этот компонент имеет android:exported="true", так что его можно вызывать из других компонентов, внешних по отношению к приложению. Хорошим примером такого использования является AlarmManager. Если приложение хочет использовать AlarmManager для установки тревоги, компонент, который вызывает AlarmManager, когда будильник отключается, должен быть общедоступным.. Причина в том, что AlarmManager должен иметь возможность запускать компонент, даже если ваше приложение не работает. Для этого компонент должен быть объявлен в манифесте, и он должен быть общедоступным (например: «android: exported =« true »).

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

вы просили пример кода. Еще одно приложения может вызвать BroadcastReciever компонент, который вы дали в этом примере, как это:

Intent intent = new Intent(); 
intent.setClassName("com.google.android.youtube", 
        "com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14$RemoteControlIntentReceiver"); 
sendBroadcast(intent); 

Надеюсь, это ответит на все ваши вопросы.

Смежные вопросы