Документация разработчика, кажется, подвела меня здесь. Я могу создать статический виджет, не задумываясь, я даже могу создать виджет, такой как виджет аналоговых часов, который будет обновляться сам, однако я не могу на всю жизнь понять, как создать виджет, который реагирует на нажатия пользователем Это. Вот лучший пример кода, который документация разработчика дает для того, что должно содержать действие виджета (единственная другая подсказка - демонстрации 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<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(context, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
от: Страница виджета документации разработчика Android
Таким образом, похоже, что ожидающее намерение вызывается при нажатии виджета, которое основано на намерении (я не совсем уверен, в чем разница между намерением и ожидающим намерением), и намерение предназначено для класс ExampleActivity. Таким образом, я сделал свой пример класса активности простым действием, которое при создании создаст объект медиаплеера и запустит его (он никогда не освободит объект, поэтому в конечном итоге произойдет сбой, вот его код:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
mp.start();
}
Однако, когда я добавил виджет на главный экран и щелкнул по нему, ничего не воспроизводилось, фактически, ничего не воспроизводилось, когда я установил таймер обновления на несколько сотен миллисекунд (в XML-файле поставщика appwidget). Кроме того, я установил точки останова и обнаружил, что он не только никогда не достигнет активности, но и не установил ни одной точки останова, которую я установил. (Я до сих пор не понял, почему это так), однако, logcat, похоже, указывал на то, что файл класса активности запускался.
Итак, что я могу сделать, чтобы приложение видело ответную реакцию на клик? Поскольку метод onClickPendingIntent () наиболее близок к методу типа onClick, который я нашел.
Большое спасибо.