Приемник Android Click и широковещательный приемник не работают - PullRequest
5 голосов
/ 02 декабря 2010

Приведенный ниже код должен описывать приложение, в котором после нажатия кнопки виджета отправляется намерение, которое должно быть получено TestReceiver.Тем не менее, при выполнении моего кода ниже, onReceive TestReceiver никогда не вызывается.

Может кто-нибудь сообщить мне, что я делаю неправильно?

Код виджета

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);



    }


}

}

Код получателя:

   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);
      }
     }

    }

Манифест:

    <?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> 

Ответы [ 2 ]

7 голосов
/ 02 декабря 2010

Возможно, это работает, но вы забыли добавить .show() в конце вашего тоста:)

0 голосов
/ 05 марта 2016

== проверяет равенство ссылок (являются ли они одним и тем же объектом).

.equals () проверяет равенство значений (являются ли они логически «равными»).сравниваются с использованием '==', а не 'равно'

Это "if(intent.getAction()==TEST_INTENT)" изменить это "if(intent.getAction().equals(TEST_INTENT))"

и, конечно, Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show();

Весь код:

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();
        }
    }
}
...