Android-widget Tasten aufhören zu arbeiten

Ich habe ein Android-Anwendung mit einem widget, das hat Tasten. Dieser code funktioniert.

Den Tasten auf der widget - aufhören zu arbeiten, wenn etwas passiert, wie das ändern der Sprache des Telefons. Ich verwenden Sie gemeinsame Vorlieben, so , wenn der Benutzer installiert die app (ohne deinstallation), die Tasten funktionieren wieder und die Einstellungen bleiben die gesetzte.

  • Habe ich bemerkt, die Absichten in meinem AppWidgetProvider - Klasse (code unterhalb dieser Analyse) werden nicht ausgelöst angemessen.
  • Ich habe eine Toast Nachricht an die Call1 Klasse instanziiert von AppWidgetProvider, aber es wird nicht angezeigt.
  • Meine UpdateService.java ist nur immer die Einstellungen verändern und anpassen der widget-Aussehen, also ich glaube nicht, dass es vielleicht sein könnte in Bezug auf mein Problem.
  • Meine Main.java - Datei besteht nur aus Spinnern und spart gemeinsame Vorlieben, was bedeutet, dass ich wählen Sie "Computer" ein spinner, so dass die "Computer" - text erscheint auf dem widget. Es wird auch nicht verschwinden, wenn ich die Sprache des Telefons, und weder die Bilder. Daher glaube ich, dass UpdateService.java muss ok sein.

Hier ist die AppWidgetProvider Klasse:

public class HelloWidget extends AppWidgetProvider {

    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String ACTION_WIDGET_CONFIGURE2 = "ConfigureWidget";
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    public static String ACTION_WIDGET_RECEIVER2 = "ActionReceiverWidget";
    private static final int REQUEST_CODE_FOUR = 40;
    private static final int REQUEST_CODE_FIVE = 50;
    private static final int REQUEST_CODE_SIX = 60;
    private static final int REQUEST_CODE_SEVEN = 70;
    private static final int REQUEST_CODE_EIGHT = 80;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        context.startService(new Intent(context, UpdateService.class));
        //Intent widgetUpdateIntent = new Intent(context, UpdateService.class);
        //context.startService(widgetUpdateIntent );

         RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain2);

         //P1 starts Call1.class
         Intent configIntent4 = new Intent(context, Call1.class);
         configIntent4.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent4 = PendingIntent.getActivity(context, REQUEST_CODE_FOUR, configIntent4, 0);
         remoteViews.setOnClickPendingIntent(R.id.ImageView01, configPendingIntent4);

         //P2 starts Call2.class
         Intent configIntent5 = new Intent(context, Call2.class);
         configIntent5.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent5 = PendingIntent.getActivity(context, REQUEST_CODE_FIVE, configIntent5, 0);
         remoteViews.setOnClickPendingIntent(R.id.ImageView02, configPendingIntent5);

         //P3 starts Call3.class
         Intent configIntent6 = new Intent(context, Call3.class);
         configIntent6.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent6 = PendingIntent.getActivity(context, REQUEST_CODE_SIX, configIntent6, 0);
         remoteViews.setOnClickPendingIntent(R.id.ImageView03, configPendingIntent6);

         //P4 starts Call4.class
         Intent configIntent7 = new Intent(context, Call4.class);
         configIntent7.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent7 = PendingIntent.getActivity(context, REQUEST_CODE_SEVEN, configIntent7, 0);
         remoteViews.setOnClickPendingIntent(R.id.ImageView04, configPendingIntent7);

         //P5 starts Call5.class
         Intent configIntent8 = new Intent(context, Call5.class);
         configIntent8.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent8 = PendingIntent.getActivity(context, REQUEST_CODE_EIGHT, configIntent8, 0);
         remoteViews.setOnClickPendingIntent(R.id.ImageView05, configPendingIntent8);

         appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
   }

    @Override
    public void onReceive(Context context, Intent intent) {

        final String action = intent.getAction();
        if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) 
        {
            final int appWidgetId = intent.getExtras().getInt(
                    AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
            if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) 
            {
                this.onDeleted(context, new int[] { appWidgetId });
            }
        } 
        else 
        {
            if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) 
            {
                String msg = "null";
                try {
                    msg = intent.getStringExtra("msg");
                    } catch (NullPointerException e) {
                    //Log.e("Error", "msg = null");
                    }
            }
            super.onReceive(context, intent);
            }
    }
}

Ich habe auch ein EditPreferences.java, GlobalVars.java und einige andere jetzt sinnlos Klassen. Die Namen der Klassen, die für sich sprechen.

Eine andere Sache. Ich habe auch ein Widgetmain.java:

  public class WidgetMain extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widgetmain2);
    }
    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) 
    {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain2);

          appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

    }
}

Edit: Wie wäre es damit:

Wenn ich installieren Sie dieses app auf mein Kollege ZTE Blade die textviews auf dem widget nicht geladen werden mit dem entsprechenden text, nur mit einer bestimmt in die strings.xml.

Wenn ich die app neu installieren (ohne deinstallation), die textviews werden geladen und alles ist fein. Dieses problem nicht auftauchen auf meinem HTC Desire HD.

Den textviews sind, laden in den oben genannten UpdateService.java wie diese (Teil-code):

RemoteViews updateViews = new RemoteViews(this.getPackageName(), R.layout.main);
updateViews.setTextViewText(R.id.widget_textview, name);
ComponentName thisWidget = new ComponentName(this, HelloWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);

Selbst wenn "name" ist statisch (z.B. String name="Etwas"), das textview wird immer noch nicht geladen, bei der ersten Installation.

  • Ich öffnete ein Kopfgeld auf diese Frage, da ich keine Fortschritte (in Wochen).
  • Wie kommst du nie nennen super.onUpdate() in der update-Funktion?
  • Ich nenne es, nur ich irgendwie verpasst aus dem code. Ich versuchte es als erste Zeile sowie der letzten Zeile der onUpdate-Funktion: super.onUpdate(Kontext, appWidgetManager, appWidgetIds);
  • Ok, tut mir Leid. Ich lese deine Lösung genauer. Was ich nicht verstehe, ist, was Sie nennen Ihre "Update-Service" - Schleife. Was genau ist Ihr service zu tun? Sehen Sie, ich brauche keinen service in meinem widget. Sollte ich einfach einen timer einstellen, um in regelmäßigen Abständen überprüfen, ob das widget muss aktualisiert werden?
InformationsquelleAutor erdomester | 2011-07-13
Schreibe einen Kommentar