Вещи еще не упомянули:
Конструктор ComponentName
, принимающий два String
, можно использовать для ссылки на компонент в другом приложении. Но первый аргумент не является именем пакета класса; это имя пакета приложения --- атрибут package
элемента manifest
в AndroidManifest.xml
этого приложения. Итак, ваш первый пример должен быть
ComponentName cn = new ComponentName("de.zordid.sampleapp",
"de.zordid.sampleapp.widget.WidgetProvider");
. Этот конструктор, безусловно, можно использовать для ссылки на компоненты в вашем собственном приложении, но, поскольку у вас уже есть Context
из вашего собственного приложения, вы также можете использовать это и использовать один из других конструкторов. На мой взгляд, тот, кто принимает Class
, должен быть предпочтительным, когда это возможно. Вы можете использовать тот, который принимает String
, если по какой-то причине вы знаете класс только динамически; в этом случае оно должно принимать полное имя класса, как указано выше.