studio example android android-widget widget android-appwidget

android - example - Widget: onUpdate, onReceive-appWidgetManager-no funciona en v2.3.5 y v3.2.1



android add widget (0)

Soy nuevo en las aplicaciones de Android y, por tanto, tengo algunas preguntas. Usando el código a continuación, estoy probando acción en ImageButton. Y sería importante recordar que esto es un widget , no una actividad.

Busqué en línea ejemplos sobre cómo usar ImageButton en un Widget y encontré muy poca información. Sin embargo, este ejemplo de trabajo parece tener problemas con diferentes versiones de Android.

Ahora, el código funciona en la versión anterior (2.1-actualización1) de Android y no en la nueva versión del teléfono (2.3.5) o en la tableta (3.2.1)

  • Trabajando - (2.1-actualización1, Samsung 5700)
  • No funciona - (2.3.5, HTC Desire HD)
  • No funciona - (3.2.1, ASUS)

Parece que ha habido algunos cambios en la API debido a lo cual ha dejado de funcionar. (Mi sugerencia de una posibilidad. Sin embargo, no estoy seguro).

LogCat de 2.1-actualización1

Iniciar sesión:

D / AAAAAA (3408): ======= onReceive

D / AAAAAA (3408): ======= onUpdate

Parece que en otras versiones incluso las funciones onUpdate () y onReceive () no funcionan.

Mi código: (Código de prueba ... :))

¿Podría mirar el código y explicar este comportamiento?

public class A_Org_WidgetActivity extends AppWidgetProvider { private static final String LOG_TAG = "AAAAAA"; Button btn; TextView txt1; ImageButton button; boolean bIcon = true; public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget"; public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d(LOG_TAG, " ======= onUpdate"); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.hor_bott_4x3); Intent configIntent = new Intent(context, ClickOneActivity.class); configIntent.setAction(ACTION_WIDGET_CONFIGURE); Intent active = new Intent(context, A_Org_WidgetActivity.class); active.setAction(ACTION_WIDGET_RECEIVER); active.putExtra("msg", "Message for Button 1"); PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0); remoteViews.setOnClickPendingIntent(R.id.ImageButton06, actionPendingIntent); remoteViews.setOnClickPendingIntent(R.id.ImageButton07, configPendingIntent); appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); } @Override public void onReceive(Context context, Intent intent) { // v1.5 fix that doesn''t call onDelete Action final String action = intent.getAction(); String msg = "null"; Log.d(LOG_TAG, " ======= onReceive"); if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { final int appWidgetId = intent.getExtras().getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ); if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { this.onDeleted(context, new int[] { appWidgetId } ); } } else { // check, if our Action was called if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) { try { msg = intent.getStringExtra("msg"); Log.d(LOG_TAG, " ======= msg = null"); } catch (NullPointerException e) { Log.d(LOG_TAG, " Error msg: " + e); } Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Notification noty = new Notification(R.drawable.icon, "Button 1 clicked", System.currentTimeMillis()); noty.setLatestEventInfo(context, "Notice", msg, contentIntent); notificationManager.notify(1, noty); } super.onReceive(context, intent); } } }

Y...

Mi manifiesto * .xml

<application android:icon="@drawable/red_circle" android:label="@string/app_name"> <receiver android:name="A_Org_WidgetActivity" 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_info" /> </receiver> <!-- <action android:name="com.widget.bla-bla.A_Org_WidgetActivity.ACTION_WIDGET_RECEIVER" /> --> <!-- Service to perform web API queries --> <service android:name="A_Org_WidgetActivity$UpdateService" /> <!-- this activity will be called, when we fire our self created ACTION_WIDGET_CONFIGURE --> <activity android:name="CommonActivity"> <intent-filter> <action android:name="com.widget.bla-bla.A_Org_WidgetActivity.ACTION_WIDGET_CONFIGURE" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7"/>