Активируемые по щелчку виджеты в андроиде

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

public class ExampleAppWidgetProvider extends AppWidgetProvider {
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i

от: страница виджета документации разработчика Android

Так, похоже, что незаконченное намерение называют, когда виджет нажат, который базируется прочь намерения (я не совсем уверен, что различие между намерением и незаконченным намерением), и намерение для класса ExampleActivity. Таким образом, я заставил свое демонстрационное действие классифицировать простое действие, которое при создании создаст объект mediaplayer и запустит его (он никогда не выпускал бы объект, таким образом, он в конечном счете откажет, вот, это - код:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
    mp.start();
}

Однако, когда я добавил виджет к главному экрану и нажал на него, ничто играемое, на самом деле, ничто играемое, когда я установил таймер обновления всего на несколько сотен миллисекунд (в appwidget XML-файле поставщика). Кроме того, я установил точки останова и узнал, что мало того, что это никогда не достигало действия, но и никаких точек останова, которые я установил, когда-либо инициировать. (Я все еще не выяснил, почему это), однако, logcat, казалось, указал, что файл класса действия выполнялся.

Так, есть ли что-нибудь, что я могу сделать, чтобы заставить appwidget отвечать на щелчок? Как onClickPendingIntent () метод является самым близким, я нашел к onClick типу метода.

Большое спасибо.

61
задан Leif Andersen 1 May 2010 в 01:58
поделиться

1 ответ

Во-первых, добавьте статическая переменная с константой.

public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";

Затем вам нужно добавить действие к намерению, прежде чем добавлять намерение к ожидающему намерению:

Intent intent = new Intent(context, widget.class);
intent.setAction(YOUR_AWESOME_ACTION);

(Где widget.class - это класс вашего AppWidgetProvider, вашего текущего класса)

Затем вам нужно создать PendingIntent с помощью getBroadcast

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

Установите onClickPendingIntent для интерактивного представления в вашем виджете

remoteView.setOnClickPendingIntent(R.id.widgetFrameLayout, pendingIntent);

Затем переопределите метод onReceive в том же классе :

@Override
public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);

И затем ответьте на нажатия ваших кнопок, запросив намерение, возвращенное для вашего действия в методе onReceive:

if (intent.getAction().equals(YOUR_AWESOME_ACTION)) {
   //do some really cool stuff here
}

И это должно сработать!

126
ответ дан 24 November 2019 в 17:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: