Документация разработчика, похоже, меня не подвела. Я могу создать статический виджет, не задумываясь, я даже могу создать виджет, похожий на виджет аналоговых часов, который будет обновляться, однако я не могу на всю жизнь понять, как создать виджет, на который реагирует, когда пользователь нажимает Это. Вот лучший пример кода, который документация разработчика дает тому, что должно содержать активность виджетов (единственный другой намек - это демонстрации 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);
}
}
}
from: Страница виджетов документации для разработчиков Android
Итак, похоже, что ожидающее намерение вызывается при щелчке виджета, которое основано на намерении (я не совсем уверен, какая разница между намерением и ожидающим намерением), и намерение класс ExampleActivity. Поэтому я сделал свой класс классов упражнений простой деятельностью, которая при создании создала объект медиапланера и запустила его (он никогда не выпустит объект, поэтому он в конечном итоге потерпит крах, вот он код:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
mp.start();
}
Однако, когда я добавил виджет на главный экран и нажал на него, ничего не сыграло, по сути, ничего не сыграло, когда я установил таймер обновления всего на несколько сотен миллисекунд (в XML файл поставщика приложения). Кроме того, я установил точки останова и выяснил, что он не только не доходил до активности, но и никаких точек останова, которые я установил, никогда не возникнет. (Я до сих пор не понял, почему это так), однако logcat, казалось, указывал, что файл класса активности запущен.
Итак, есть ли что-нибудь, что я могу сделать, чтобы заставить appwidget отвечать на клик? Поскольку метод onClickPendingIntent() является самым близким, я нашел метод типа onClick.
Большое спасибо.