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