Почему два параметра для конструктора ComponentName?

Из книги Pro Android 2: "ComponentName объединяет имя пакета и имя класса вместе. Например..."

Intent intent = new Intent();
Intent.setCompnonet(new ComponentName(
    "com.android.contacts"
    ,"com.android.contacts.DialContactsEntryActivity");
startActivity(intent)

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

Есть ли сценарий, в котором класс, переданный конструктору ComponentName , не принадлежит к пакету, переданному одному конструктору?

Ответы

Ответ 1

Компонент приложения может существовать в приложении, чье имя пакета (объявленное в манифесте Android) полностью отличается от пакета Java для конкретного класса, который определяет компонент. Например, MapsActivity в приложении Google Maps:

intent.setComponent(new ComponentName("com.google.android.apps.maps", 
    "com.google.android.maps.MapsActivity"));

Ответ 2

или

intent.setComponent(new ComponentName("com.google.android.apps.maps", 
MapsActivity.class.getName()));