Ich versuche etwas zu tun, das wirklich ziemlich einfach sein sollte, aber es macht mich verrückt. Ich versuche, eine Aktivität zu starten, wenn ein Startbildschirm-Widget gedrückt wird, z. B. eine Konfigurationsaktivität für das Widget. Ich denke, ich habe Wort für Wort das Tutorial auf der Android-Entwickler-Website und sogar ein paar inoffizielle Tutorials gefolgt, aber ich muss etwas wichtiges verpassen, wie es nicht funktioniert. HierStarten von Aktivität von Widget
ist der Code:
public class VolumeChangerWidget extends AppWidgetProvider {
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];
Log.d("Steve", "Running for appWidgetId " + appWidgetId);
Toast.makeText(context, "Hello from onUpdate", Toast.LENGTH_SHORT);
Log.d("Steve", "After the toast line");
Intent intent = new Intent(context, WidgetTest.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
Wenn das Widget auf dem Homescreen hinzufügen, Logcat zeigt die beiden Debug-Linien, wenn auch nicht der Toast. (Irgendwelche Ideen, warum nicht?) Aber ärgerlicher ist, dass, wenn ich dann auf den Button mit dem PendingIntent damit verbunden bin, nichts passiert. Ich weiß, dass die "WidgetTest" -Aktivität ausgeführt werden kann, denn wenn ich einen Intent innerhalb der Hauptaktivität einrichte, startet er gut.
Bei zählt es, hier ist die Android-Manifest-Datei:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.steve"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Volume_Change_Program"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".WidgetTest"
android:label="@string/hello">
<intent_filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent_filter>
</activity>
<receiver android:name=".VolumeChangerWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/volume_changer_info" />
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
Gibt es eine Möglichkeit zu testen, wo der Fehler ist? I.e. ist der Fehler, dass die Schaltfläche nicht ordnungsgemäß mit dem PendingIntent verknüpft ist oder dass der PendingIntent oder Intent WidgetTest.class usw. nicht findet?
Vielen Dank für Ihre Hilfe!
Steve
Leider nein, ich habe noch nicht herausgefunden, wie das geht. Es muss etwas unklares sein, so wie du, ich habe alle Tutorials gelesen, die ich finden konnte, aber nie etwas gefunden, das funktioniert hat. Ich habe gerade dieses Projekt eingestellt und angefangen, an etwas anderem zu arbeiten, bis ich weiß, wie ich Android besser gebrauchen kann. –
Hey Steve. Ich denke, ich habe die Lösung gefunden. Ich entwickle auf 2.0.1. Der Schlüssel war, diesen genauen Code in onUpdated zu verschieben und dann eine weitere Sache aufzurufen - ein Verweis auf AppWidgetManager kommt über die Parameter in den OnUpdated. Komponentenname comp = new Komponentenname (context.getPackageName(), ToggleWidget.class.getName()); appWidgetManager.updateAppWidget (comp, Ansichten); Diese Version sagt es, alle Instanzen des Widgets wie folgt zu aktualisieren. Das einzige Problem ist jetzt, onEnabled onUpdate einmal aufrufen zu lassen, so dass es eintritt, wenn der Benutzer ein Widget zu Hause hinzufügt. – mylock
+1 danke. Durch Hinzufügen des mgr.updateAppWidget konnte ich endlich mein Widget dazu bringen, dasselbe zu tun. – nategood