title: Android Widget ListView Item click not working (Widget Updated via Service)
body: <p>Please, I'm a bit stuck here. I'm updating my Widgets with a background service( as opposed to using "onUpdate" method) using an AlarmManager for interval repeat . Everything seems to works fine, the ListView populates data, but for some reason items on the ListView aren't starting the Activity set on the PendingIntent when clicked.</p>
  
  <p>UPDATE:</p>
  
  <p>Think the code works fine. Tested it in other devices and it works fine(A Motorola and HTC). But for some reason, it doesn't work on my Samsung Galaxy S5</p>
  
  <p>Here is the code below</p>
  
  <p>WidgetService.java</p>
  
  <pre><code>public class WidgetService extends Service implements LocationListener, GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks {
  
  
      private LocationManager locationManager;
      private LocationRequest locationRequest;
      private GoogleApiClient googleApiClient;
  
      @Override
      public void onCreate() {
          super.onCreate();
          //Initialize Google API client build and connect
          buildGoogleApiClient();
  
          //Initialize Android Location Service
          locationManager = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);
  
          //Check if Location is Enabled
          if (LocationHelper.checkLocationEnabled(null, locationManager)) {
              //TODO: Check Google Play Services Availability
              googleApiClient.connect();
          }
      }
  
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
          int[] widget_ids = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
  
          if (widget_ids != null) {
              buildUpdate(widget_ids);
          }
  
  
          return super.onStartCommand(intent, flags, startId);
      }
  
      private void buildUpdate(int... appwidget_ids) {
  
          for (int appwidget_id : appwidget_ids) {
  
              RemoteViews views = new RemoteViews(getPackageName(), R.layout.closest_banks_appwidget);
              if (ClosestBanksWidget.LAST_LOCATION != null) {
  
                  Intent intent = new Intent(this, WidgetRemoteViewsService.class);
                  // Add the app widget ID to the intent extras.
                  intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appwidget_id);
                  intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
  
                 /*
                  Intent start_activity_intent = new Intent(this, BankFinderBroadcastReceiver.class);
                  intent.setAction(ClosestBanksWidget.WIDGET_CLICK_INTENT_ACTION);
                  PendingIntent start_activity_PI = PendingIntent.getBroadcast(this, 0,
                          start_activity_intent, 0);
                 */
  
                  Intent start_activity_intent = new Intent(this, LocationDetailActivity.class);
                  PendingIntent start_activity_PI = PendingIntent.getActivity(this, 0,
                          start_activity_intent, PendingIntent.FLAG_UPDATE_CURRENT);
  
  
                  String[] params = {"search", String.valueOf(ClosestBanksWidget.LAST_LOCATION.getLatitude()), String.valueOf(ClosestBanksWidget.LAST_LOCATION.getLongitude()), "", ""};
                  intent.putExtra("query_params", params);
  
                  if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
                      views.setRemoteAdapter(R.id.widget_location_list_view, intent);
                  else
                      views.setRemoteAdapter(appwidget_id, R.id.widget_location_list_view, intent);
  
                  views.setPendingIntentTemplate(R.id.widget_location_list_view, start_activity_PI);
              }
  
              // Push update for this widget to the home screen
              //ComponentName thisWidget = new ComponentName(this, ClosestBanksWidget.class);
              AppWidgetManager manager = AppWidgetManager.getInstance(this);
              manager.notifyAppWidgetViewDataChanged(appwidget_id, R.id.widget_location_list_view);
              manager.updateAppWidget(appwidget_id, views);
          }
  
  
      }
  
  
      @Nullable
      @Override
      public IBinder onBind(Intent intent) {
          return null;
      }
  
      protected synchronized void buildGoogleApiClient() {
          googleApiClient = new GoogleApiClient.Builder(this)
                  .addConnectionCallbacks(this)
                  .addOnConnectionFailedListener(this)
                  .addApi(LocationServices.API)
                  .build();
      }
  
      protected void startLocationUpdates() {
          createLocationRequest();
          LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
      }
  
      protected void createLocationRequest() {
          locationRequest = new LocationRequest();
          locationRequest.setInterval(victorikoro.com.bankfinder.objects.Constants.LOCATION_UPDATE_FAST_INTERVAL * 2);
          locationRequest.setFastestInterval(victorikoro.com.bankfinder.objects.Constants.LOCATION_UPDATE_FAST_INTERVAL);
          locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
          //locationRequest.setSmallestDisplacement(Constants.MINIMUM_LOCATION_DISPLACEMENT);
      }
  
      @Override
      public void onConnected(Bundle bundle) {
          //Get Last Location
          ClosestBanksWidget.LAST_LOCATION = LocationServices.FusedLocationApi.getLastLocation(
                  googleApiClient);
          //Start getting periodic location updates
          startLocationUpdates();
      }
  
      @Override
      public void onConnectionSuspended(int i) {
  
      }
  
      @Override
      public void onLocationChanged(Location location) {
          ClosestBanksWidget.LAST_LOCATION = location;
      }
  
      @Override
      public void onConnectionFailed(ConnectionResult connectionResult) {
  
      }
  }
  </code></pre>
  
  <p>ClosestBankWidget.java</p>
  
  <pre><code>public class ClosestBanksWidget extends AppWidgetProvider {
      protected Context mContext;
      public static Location LAST_LOCATION;
      public static String WIDGET_CLICK_INTENT_ACTION = "victorikoro.com.bankfinder.WIDGET_START_ACTIVITY";
  
      private PendingIntent service;
  
      public ClosestBanksWidget() {
          super();
      }
  
      @Override
      public void onEnabled(Context context) {
          super.onEnabled(context);
          mContext = context;
          Intent intent = new Intent(context, WidgetService.class);
          context.startService(intent);
      }
  
      public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  
  
          int N = appWidgetIds.length;
          int[] widget_ids = new int[N];
          int[] widget_ids_clone = new int[N];
  
          final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          for (int i = 0; i &lt; appWidgetIds.length; i++) {
  
              widget_ids[i] = appWidgetIds[i];
  
          }
  
          final Calendar TIME = Calendar.getInstance();
          TIME.set(Calendar.MINUTE, 0);
          TIME.set(Calendar.SECOND, 0);
          TIME.set(Calendar.MILLISECOND, 0);
  
  
          final Intent i = new Intent(context, WidgetService.class);
          i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widget_ids);
          if (service == null) {
              service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
          }
          m.setRepeating(AlarmManager.RTC, TIME.getTime().getTime(), Constants.WIDGET_UPDATE_INTERVAL, service);
          super.onUpdate(context, appWidgetManager, appWidgetIds);
      }
  
      @Override
      public void onReceive(Context context, Intent intent) {
          super.onReceive(context, intent);
      }
  }
  </code></pre>
  
  <p>WidgetRemoteViewService.java</p>
  
  <pre><code>public class WidgetRemoteViewsService extends RemoteViewsService {
  
      @Override
      public RemoteViewsFactory onGetViewFactory(Intent intent) {
          return new WidgetRemoteViewsFactory(this.getApplicationContext(), intent);
      }
  
  
      class WidgetRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
  
          private static final int mCount = 10;
          protected List&lt;ATMLocation&gt; locations = new ArrayList&lt;ATMLocation&gt;();
          private Context mContext;
          private int mAppWidgetId;
          private Intent intent;
          protected jsqlite.Database db;
  
  
          public WidgetRemoteViewsFactory(Context applicationContext, Intent intent) {
  
              this.mContext = applicationContext;
              this.intent = intent;
              //Initialize DB
              db = DBHelper.getDBInstance(mContext);
              if (db != null) {
                  String[] params = intent.getStringArrayExtra("query_params");
                  this.locations = LocationHelper.getATMLocations(db, params).subList(0, mCount);
              }
  
  
          }
  
          @Override
          public void onCreate() {
  
  
          }
  
  
          public void onDestroy() {
              if (db != null) {
                  try {
                      db.close();
                  } catch (jsqlite.Exception e) {
                      e.printStackTrace();
                  }
              }
  
          }
  
          @Override
          public int getCount() {
  
              return locations.size();
          }
  
          public RemoteViews getViewAt(int position) {
              ATMLocation location = locations.get(position);
              RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.list_item_widget);
  
              String bank_name = LocationHelper.getFormattedBankName(location.bank, mContext);
              if (location.branch.equalsIgnoreCase("true")) {
                  bank_name += ("(Branch)");
              }
              rv.setTextViewText(R.id.widget_bank_name, bank_name);
              rv.setTextViewText(R.id.widget_bank_address, location.address);
              rv.setTextViewText(R.id.widget_distance, LocationHelper.getFormattedDistance(location.distance));
              rv.setImageViewResource(R.id.widget_bank_logo_small, LocationHelper.getBankLogoResourceID(location.bank, mContext));
              // Return the remote views object.
  
              Intent intent = new Intent();
  
              Bundle bundle = new Bundle();
              bundle.putString("latitude", location.latitude);
              bundle.putString("longitude", location.longitude);
              bundle.putString("id", location.id);
              bundle.putString("given_id", location.given_id);
              bundle.putString("bank", location.bank);
              bundle.putString("email", location.email);
              bundle.putString("address", location.address);
              bundle.putString("tel", location.tel);
              bundle.putString("tel2", location.tel2);
              bundle.putString("branch", location.branch);
              bundle.putString("distance", location.distance);
              bundle.putString("other", location.other);
              bundle.putString("machines", location.machines);
              intent.putExtras(bundle);
              rv.setOnClickFillInIntent(R.id.widget_list_item, intent);
              return rv;
          }
  
          @Override
          public RemoteViews getLoadingView() {
              return null;
          }
  
          @Override
          public int getViewTypeCount() {
              return 1;
          }
  
  
          public long getItemId(int position) {
              return position;
          }
  
          public boolean hasStableIds() {
              return true;
          }
  
          public void onDataSetChanged() {
              if (db != null) {
                  locations = LocationHelper.getATMLocations(db, intent.getStringArrayExtra("query_params"));
              }
  
          }
  
  
      }
  }
  </code></pre>
  
  <p>closest_bank_appwidget.xml</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical" android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/cardview_light_background"&gt;
  
      &lt;RelativeLayout
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:background="@color/colorPrimary"
          android:backgroundTint="@color/colorPrimaryDark"
          android:backgroundTintMode="screen"&gt;
  
          &lt;TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"
              android:layout_alignParentLeft="true"
              android:layout_margin="10dp"
              android:textSize="18sp"
              android:text="@string/widget_title"
              android:textColor="@android:color/white"
              /&gt;
  
          &lt;TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentRight="true"
              android:textSize="15sp"
              android:text="--"
              android:textStyle="italic"
              android:textColor="@android:color/white"
              android:layout_centerInParent="true"
              android:layout_marginRight="5dp" /&gt;
  
      &lt;/RelativeLayout&gt;
      &lt;ListView
          android:layout_width="fill_parent"
          android:layout_height="match_parent"
          android:id="@+id/widget_location_list_view"
          android:divider="@android:drawable/divider_horizontal_textfield"
          android:dividerHeight="1dp"
          android:layout_margin="10dp"
          android:drawSelectorOnTop="true"&gt;
  
      &lt;/ListView&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>list_item_widget.xml</p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/widget_list_item"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginBottom="10dp"
      android:elevation="2dp"
      android:orientation="vertical"
      android:padding="10dp"&gt;
  
      &lt;ImageView
          android:id="@+id/widget_bank_logo_small"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:layout_alignParentTop="true"
          android:layout_marginRight="12dp"
          android:focusable="false"
          android:src="@drawable/wema_logo" /&gt;
  
  
      &lt;TextView
          android:id="@+id/widget_bank_name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_toRightOf="@+id/widget_bank_logo_small"
          android:focusable="false"
          android:text="@string/wema"
          android:textColor="@color/colorPrimary"
          android:textSize="14sp"
          android:textStyle="bold" /&gt;
  
      &lt;TextView
          android:id="@+id/widget_bank_address"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/widget_bank_name"
          android:layout_marginBottom="4dp"
          android:layout_marginTop="4dp"
          android:layout_toEndOf="@+id/widget_bank_logo_small"
          android:layout_toRightOf="@+id/widget_bank_logo_small"
          android:focusable="false"
          android:text="@string/wema_loc"
          android:textColor="#565656"
          android:textSize="14sp" /&gt;
  
  
      &lt;TextView
          android:id="@+id/widget_distance"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_alignParentLeft="true"
          android:layout_below="@+id/widget_bank_logo_small"
          android:layout_marginTop="10dp"
          android:focusable="false"
          android:text="--"
          android:textColor="@color/colorPrimary"
          android:textSize="13sp"
          android:textStyle="bold" /&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>