6

Ich habe seit drei Tagen mit diesem Problem gearbeitet und ich habe jede einzelne Frage hier für eine Antwort untersucht. Ich habe ein Widget mit einem Knopf und alles, was ich möchte, ist einen Dienst zu starten, jedes Mal wenn es angeklickt wird. Das Problem ist, dass die Schaltfläche nicht mehr funktioniert. Ich kann es überhaupt nicht neu erstellen und ich habe keine Ahnung, was es verursacht. Mein Service ruft stopSelf() auf; aber ich hatte dieses problem mit einem broadcast receiver auch deshalb glaube ich das problem im widget zu sein und nicht im service. Hier ist der CodeAndroid Widget funktioniert nicht mehr zufällig

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]  appWidgetIds) 
{ 

Log.i("Widget", "onUpdate"); 

final int N = appWidgetIds.length; 

    for (int i=0; i<N; i++) 
    { 

     int appWidgetId = appWidgetIds[i]; 

     Log.i("Widget", "onUpdateLoop"); 


     Intent intent = new Intent(context, ServiceWidgetAction.class); 
     intent.setAction(Long.toString(System.currentTimeMillis())); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent pendingIntent = PendingIntent 
       .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.widget); 

     views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); 

     views.setTextViewText(
       R.id.widgetTextView, 
       "Some text"); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 

    } 

} 

Ich habe diesen Code immer wieder überprüft und ich habe keine Ahnung, warum es das tut. Es macht das auf 3 separaten Telefonen und ich kann es nicht neu erstellen. Ich habe versucht, die App zu beenden, sie von einem Task-Manager zu entfernen, neue Widgets usw. hinzuzufügen, damit das Widget nicht mehr funktioniert und es nicht funktioniert. Aber als ich heute Morgen aufwachte, funktioniert das Widget nicht mehr. Jede Hilfe wäre sehr geschätzt.

+0

Sehen Sie etwas im LogCat, wenn es passiert? – CaseyB

+0

Nichts im Logcat, es ist wie eine Schaltfläche ohne onClick-Methode in einer Aktivität. Ich kann sehen, dass es gedrückt wird, aber nichts passiert in der App oder im Logcat. –

Antwort

10

ich das Problem, herauszufinden, endete. Ich habe das Widget von anderen Orten in der App aktualisiert, und ich hatte nicht den vollständigen Code für jeden. Mit anderen Worten meiner App, die Textviews im Widget wie diese

RemoteViews views = new RemoteViews(context.getPackageName(), 
      R.layout.widget); 

    views.setTextViewText(
      R.id.widgetTextView, 
      "Some text"); 

    appWidgetManager.updateAppWidget(appWidgetId, views); 

aktualisierte Aber es den gesamten Code erforderlich, um die Schaltfläche wie diese registriert zu halten:

Intent intent = new Intent(context, ServiceWidgetAction.class); 
    intent.setAction(Long.toString(System.currentTimeMillis())); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    PendingIntent pendingIntent = PendingIntent 
      .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    RemoteViews views = new RemoteViews(context.getPackageName(), 
      R.layout.widget); 

    views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); 

    views.setTextViewText(
      R.id.widgetTextView, 
      "Some text"); 

    appWidgetManager.updateAppWidget(appWidgetId, views); 

Unterm Strich also wird, wenn Sie einen Widget aktualisieren Vergewissern Sie sich in Ihrer App, dass sie genau wie der Code im Widget selbst aussieht. Lass nichts aus.

+0

Danke. In meinem Fall könnte die einzelne Methode, die immer Widget aktualisiert, in einigen Fällen Ausnahmen auslösen, und ein Teil des Codes würde nicht ausgeführt. – Alireza

+0

das ist gold, warte nein - es ist bitcoin wert zu antworten - 10x mate – gor

0

Haben Sie Ihr Widget auf der SD-Karte installiert?

Google empfiehlt, alle Widget-, Alarm- und Empfänger-App-Typen in den internen Speicher zu installieren, aufgrund von System-Sync-Problemen wie dieser.

Vielleicht nicht die Lösung, sondern ein "muss prüfen";)

android:installLocation="internalOnly" 
+0

Ich habe nicht daran gedacht, weil ich App auf SD aktiviert habe, aber ich habe es nur überprüft und die App wurde in den internen Speicher installiert. Danke für die Eingabe! –