Ergebnis 1 bis 8 von 8
-
User66586 Gast
Hallo zusammen,
ich habe da ein kleines Problemchen, und zwar habe ich ne kleine App geschrieben um mich mit Widgets vertraut zu machen.
Diese App zeigt beim Starten in einem EditText einen Text an.
Nun habe ich versucht ein Widget hinzuzufügen, was beim antippen die Activity startet (also genauso, als würde man die App direkt starten). Auf dieser Methode will ich später eine andere App aufbauen, die beim antippen das Widget-Icon ändert.
Leider wird das Programm beim erstellen des Widgets auf dem Homescreen gezwungenermaßen beendet (Die Anwendung... wurde unerwartet beendet).
Hier mal die nötigen Sourcecodes:
WidgetHello.java
Code:package com.test.widgethello; import android.app.Activity; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.EditText; import android.widget.RemoteViews; public class WidgetHello extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText et_hello = (EditText) findViewById(R.id.et_hello); et_hello.setText("Hallo Du da!"); } class WidgetUpdate extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; for (int i = 0; i < N; i++) { int appWidgetId = appWidgetIds[\i]; <-- Kommentar-Forum: Escape vor i, weil sonst BB-Code für Kursiv eingeleitet und damit code-Tag nicht ohne Fehler! Escape im Quelltext nicht vorhanden!!! Intent intent = new Intent(context, WidgetHello.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout); views.setOnClickPendingIntent(R.id.Button01, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, views); } } } }
Code:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.widgethello" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".WidgetHello" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="WidgetUpdate" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget" /> </receiver> </application> <uses-sdk android:minSdkVersion="8" /> </manifest>
Code:<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="60000" android:initialLayout="@layout/appwidgetlayout" > </appwidget-provider>
Code:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:text="Start" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout>
Gruß Oli
-
Gehöre zum Inventar
- 23.12.2010, 10:11
- #2
Ohne mir den Code angeschaut zu haben und ohne je mit Widgets gearbeitet zu haben, ohne Logcat-Fehlermeldungen wird es schwierig dir zu helfen. Also: Was sagt Logcat?
-
User66586 Gast
Hi, danke für deinen Hinweis, aber ich habe das Problem mit einiger Recherche mittlerweile lösen können und die bestehende App mit einem funktionierenden Widget versehen
Gruß Oli
...und frohe Weihnachten
-
- 24.12.2010, 23:53
- #4
Dann poste doch deine Lösung oder den Ansatz, das hilft vielleicht anderen
-
User66586 Gast
Das hatte ich auch vor
jedoch gestern, aus wohlbekannten Gründen
, nicht so die Zeit das auch zu tun.
Das hole ich jetzt nach.
Also, hier mal ein kleines HowTo für mein Problem
Ziel war es, eine bestehende App mit einem Widget zu versehen. Es geht dabei um die App "Static IP Toggle", die im Market verfügbar ist (Entwicklername: Chemdroid).
Diese App wechselt beim Starten zwischen DHCP und fester IP-Einstellung. Soll heißen:
App wird gestartet -> DHCP setting
App wird erneut gestartet -> static IP setting und so weiter.
Nun hatte mich ein User angefragt, dass es schön wäre, wenn es ein Widget zu meiner App gäbe, dass anzeigt, ob nun DHCP oder static IP gesetzt ist, dies habe ich nun folgendermaßen gelöst:
Hinzugefügte Texte im Bezug auf vorhergehende Version ohne Widget blau hervorgehoben.
Zunächst habe ich das Widget in der /AndroidManifest.xml deklariert:
Code:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.chemdroid.staticiptoggle" android:installLocation="internalOnly" android:versionName="1.2" android:versionCode="3"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".StaticIPToggle" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Widget" android:label="@string/app_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" /> </receiver> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> </manifest>
Code:<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="72dp" android:minHeight="72dp" android:updatePeriodMillis="0" android:initialLayout="@layout/widget_dhcp"> </appwidget-provider>
Widget.java wurde erstellt und dort zum einen, je nach Systemeinstellung, das Layout gewählt, und dann die Activity gestartet, die ein Umschalten der Konfiguration zur Folge hat:
Code:package com.chemdroid.staticiptoggle; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.widget.RemoteViews; public class Widget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { int use_static_ip; RemoteViews remoteViews; try { use_static_ip = Settings.System.getInt(context.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP); if (use_static_ip == 0) { //DHCP remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_dhcp); } else { //static IP remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_static); } Intent call_activity = new Intent(context, StaticIPToggle.class); PendingIntent pending_call_activity = PendingIntent.getActivity(context, 0, call_activity, 0); remoteViews.setOnClickPendingIntent(R.id.widget_icon, pending_call_activity); appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); } catch (SettingNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Code:package com.chemdroid.staticiptoggle; import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.provider.Settings.SettingNotFoundException; import android.provider.Settings; import android.widget.Toast; public class StaticIPToggle extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int use_static_ip; try { --> Code für Änderung der Config AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); ComponentName componentName = new ComponentName(getApplicationContext(), Widget.class); int[] ids = appWidgetManager.getAppWidgetIds(componentName); Intent update_widget = new Intent(); update_widget.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); update_widget.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); getApplicationContext().sendBroadcast(update_widget); } catch (SettingNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finish(); } }
Gruß Oli
-
User66586 Gast
Hallo nochmals,
leider fiel mir und einem anderen Nutzer bei der Nutzung des Widgets noch folgendes Problem auf:
Wird das Widget angetippt, so erscheint für einen kurzen Zeitpunkt das Widget der Energiesteuerung, bevor das eigentliche Widget angezeigt wird.
Hier ein Screenshot von diesem Verhalten:
Ausgangspunkt ist das linke Bild, dann wird das Widget angetippt, das mittlere Bild bleibt für ca. eine halbe Sekunde, manchmal auch eine Sekunde lang aktuell. Danach erscheint das eigentliche Widget (rechtes Bild).
Leider finde ich keinen Fehler in meinem Code (siehe voriger Post).
Was meint ihr dazu?
Gruß Oli
-
User66586 Gast
Hat niemand eine Idee wieso das geschilderte Problem auftritt?
-
User66586 Gast
Habe das Problem nun gelöst, indem ich einen eigenen Intent sende, und per onReceive-Methode die onUpdate-Methode aufrufe.
Ähnliche Themen
-
Kontakt hinzufügen (Verknüpfung / Widget)
Von Xerox3 im Forum Android AppsAntworten: 5Letzter Beitrag: 05.01.2012, 18:23 -
Facebook Widget wie benachrichtigungen Anzeigen ohne Widget zu öffnen
Von Gago im Forum HTC Desire HDAntworten: 4Letzter Beitrag: 30.10.2010, 15:03 -
HTC nachrichten widget (sms widget)
Von rexx im Forum HTC Desire KommunikationAntworten: 2Letzter Beitrag: 29.08.2010, 07:53 -
Kontakt-Widget: ich kann keine Kontakte hinzufügen
Von mentos6 im Forum HTC LegendAntworten: 7Letzter Beitrag: 10.06.2010, 00:14 -
Verknüpfungs Widget Shortcuts hinzufügen nicht möglich
Von Tiilt im Forum Samsung Omnia IIAntworten: 2Letzter Beitrag: 17.11.2009, 19:42
Pixel 10 Serie mit Problemen:...