2010-12-01 15 views
5

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> 
+0

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

+0

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

+0

Ja, weil du '.show()' :) nicht hinzugefügt hast :) – EboMike

Antwort

7

Es funktioniert wahrscheinlich, aber Sie vergessen .show() bei hinzufügen das Ende deines Toast :)

0

== Tests für Referenzgleichheit (ob sie das gleiche Objekt sind).

.equals() prüft auf Wertgleichheit (ob sie logisch "gleich" sind).

String Werten verglichen werden '==' nicht 'gleich'

Diese "if(intent.getAction()==TEST_INTENT)" ändern, um diese "if(intent.getAction().equals(TEST_INTENT))"

und natürlich Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show();

Alle Codes:

package *********; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 


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 holaaa", Toast.LENGTH_SHORT).show(); 

     if(intent.getAction() == TEST_INTENT) 
      // if(intent.getAction().equals(TEST_INTENT)) 
     { 
      System.out.println("GOT THE INTENT"); 

      Toast.makeText(context, "Test Goooo", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
Verwandte Themen