Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid App Widget broadcast doesn't work
    text
    copied!<p>I have a widget with 1 image view and 1 text view. </p> <p><img src="https://i.stack.imgur.com/fUobf.png" alt="on"><img src="https://i.stack.imgur.com/XkazY.png" alt="off"></p> <p>I want to change image on click. Consider following code doesn't catch touch event</p> <pre><code>package com.sigrlami.rixvpn.widget; import java.util.Random; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.RemoteViews; import com.sigrlami.rixvpn.R; public class VpnWidgetProvider extends AppWidgetProvider { private boolean currentStatus = false; // log tag private static final String LOG = "com.sigrlami.rixvpn.widget.VpnWidgetProvider"; //public static final String CLICK = "com.sigrlami.rixvpn.CLICK"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // Get all ids ComponentName thisWidget = new ComponentName(context, VpnWidgetProvider.class); int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); for (int widgetId : allWidgetIds) { // Create some random data int number = (new Random().nextInt(100)); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.vpn_widget); Log.w("WidgetExample", String.valueOf(number)); // Set the text remoteViews.setTextViewText(R.id.layout_vpn_widget_tv_Check, String.valueOf(number)); // Register an onClickListener Intent intent = new Intent(context, VpnWidgetProvider.class); intent.setAction(appWidgetManager.ACTION_APPWIDGET_UPDATE); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); remoteViews.setOnClickPendingIntent(R.id.layout_vpn_widget_iv_Check, pendingIntent); if (currentStatus = false) { remoteViews.setImageViewResource(R.id.layout_vpn_widget_iv_Check, R.drawable.on); } else { remoteViews.setImageViewResource(R.id.layout_vpn_widget_iv_Check, R.drawable.off); } appWidgetManager.updateAppWidget(widgetId, remoteViews); } } @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { if (currentStatus == false) { currentStatus = true; } else { currentStatus = false; } } super.onReceive(context, intent); } </code></pre> <p>}</p> <p>Looking to this part through debugger shows nothing strange, but when I change to getActivity() it shows that I'm trying to start a activity that does not exist. I see that something is going on, but this is useless to me.</p> <pre><code>// Register an onClickListener Intent intent = new Intent(context, VpnWidgetProvider.class); intent.setAction(appWidgetManager.ACTION_APPWIDGET_UPDATE); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); remoteViews.setOnClickPendingIntent(R.id.layout_vpn_widget_iv_Check, pendingIntent); </code></pre> <p>But it works 1 time when app deployed to device. Any suggestions what I have done wrong?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload