Der folgende Code sollte eine App beschreiben, bei der, sobald die Widget-Schaltfläche geklickt wurde, eine Absicht gesendet wird, die von TestReceiver empfangen werden sollte. Beim Ausführen meines unteren Codes wird onReceive von TestReceiver jedoch nie aufgerufen.Android Widget Click and Broadcast Empfänger funktioniert nicht
Könnte jemand mich wissen lassen, was ich falsch mache?
Widget Code
public class Widget 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.getApplicationContext(), TestReceiver.class);
Intent intent = new Intent();
intent.setAction(TestReceiver.TEST_INTENT);
intent.setClassName(TestReceiver.class.getPackage().getName(), TestReceiver.class.getName());
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views;
views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setOnClickPendingIntent(R.id.btnTest, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
Receiver Code:
public class TestReceiver extends BroadcastReceiver {
public static final String TEST_INTENT= "MyTestIntent";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Test", Toast.LENGTH_SHORT);
if(intent.getAction()==TEST_INTENT)
{
System.out.println("GOT THE INTENT");
Toast.makeText(context, "Test", Toast.LENGTH_SHORT);
}
}
}
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.intenttest"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".TestReceiver" android:label="@string/app_name">
<intent-filter>
<action android:name="MyTestIntent">
</action>
</intent-filter>
</receiver>
<receiver android:label="@string/app_name" android:name="Widget">
<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="3" />
</manifest>
Dumm Frage zuerst - funktioniert es, wenn Sie nur eine regelmäßige Intent() erstellen und startActivity() irgendwo in Ihrer App aufrufen? Stellen Sie nur sicher, dass der Empfänger richtig eingerichtet ist. – EboMike
Ich habe context.sendBroadcast (intent) hinzugefügt; zur OnUpdate-Funktion im Widget. Es jetzt zu debuggen, es scheint, als ob es den Empfänger auf dieser Aussage anruft und jetzt, wenn ich auf den Knopf klicke. Ich glaube, ich wurde verwirrt, weil der Toast-Anruf, den ich machte, nichts bewirkt. – Kratz
Ja, weil du '.show()' :) nicht hinzugefügt hast :) – EboMike