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"/>