La documentation du développeur semble avoir échoué ici. Je peux créer un widget statique sans réfléchir, je peux même créer un widget comme le widget horloge analogique qui se mettra à jour, cependant, je ne peux pas pour la vie de moi comprendre comment créer un widget qui réagit quand un utilisateur clique sur il. Voici le meilleur exemple de code que la documentation développeur donne à ce qu'une activité widget doit contenir (le seul autre indice étant les démos de l'API, ce qui crée seulement un widget statique):Widgets cliquables dans 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);
}
}
}
de: The Android Developer Documentation's Widget Page
Ainsi, il semble que l'intention en attente soit appelée lorsque le widget est cliqué, ce qui est basé sur une intention (je ne suis pas sûr de la différence entre une intention et une intention en attente) et l'intention est pour la classe ExampleActivity . Donc, j'ai fait ma classe d'activité exemple une activité simple qui lors de sa création, créerait un objet MediaPlayer, et commencer (il ne jamais libérer l'objet, il finirait par tomber en panne, voici son code:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound);
mp.start();
}
Cependant, lorsque j'ai ajouté le widget à l'écran d'accueil et que j'ai cliqué dessus, rien n'a joué, en fait, rien n'a été joué lorsque j'ai réglé la minuterie de mise à jour à quelques centaines de millisecondes. mettre en place des points de rupture et découvert que non seulement il n'atteignait jamais l'activité, mais aucun point de rupture que je définissais ne serait jamais déclenché (je n'ai toujours pas compris pourquoi), cependant, logcat semblait indiquer que la classe d'activité le fichier était en cours d'exécution
Alors, y a-t-il quelque chose que je puisse faire pour obtenir un appwidget pour répondre à un clic? Comme la méthode onClickPendingIntent() est le plus proche d'un type de méthode onClick.
Merci beaucoup.
Hai Leif, résolvez-vous ce problème par la méthode de Brain515? J'ai un problème similaire, mais la solution du cerveau ne fonctionne pas pour moi, pouvez-vous s'il vous plaît m'aider? –