2015-09-28 45 views
2

我有一個小部件,它運行良好,當應用程序在後臺運行。但是當我用應用程序管理器終止應用程序時,小部件不會觸發click事件。然後我重新打開應用程序,並且小部件仍不會觸發點擊事件。有任何想法嗎?應用程序小部件點擊無法工作,當應用程序死亡

public class Widget extends AppWidgetProvider { 

    private ArrayList<Widget> widgets; 
    private static String listing1 = ""; 
    private static String listing2 = ""; 
    private static String listing3 = ""; 
    private static String listing4 = ""; 
    private static String listing5 = ""; 
    RemoteViews views; 

    public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { 
     Log.i("ExampleWidget", "Updating widgets " + Arrays.asList(appWidgetIds)); 

     // Perform this loop procedure for each App Widget that belongs to this 

     HashMap<String, String> params = new HashMap<>(); 
     params.put("islem", "recommendation"); 

     ServiceConnector.secretcvAPI.getWidgetItems(params, new SuccessCallback<GetWidgetResponse>() { 
      @Override 
      public void success(GetWidgetResponse getWidgetResponse, Response response) { 
       widgets = getWidgetResponse.widgets; 

       for (int appWidgetId : appWidgetIds) { 

        listing1 = widgets.get(0).ilan_id; 
        listing2 = widgets.get(1).ilan_id; 
        listing3 = widgets.get(2).ilan_id; 
        listing4 = widgets.get(3).ilan_id; 
        listing5 = widgets.get(4).ilan_id; 
        // Get the layout for the App Widget and attach an on-click listener 
        // to the button 
        views = new RemoteViews(context.getPackageName(), R.layout.widget); 
        views.setOnClickPendingIntent(R.id.listing1, getPendingSelfIntent(context, widgets.get(0).ilan_id, appWidgetId)); 
        views.setOnClickPendingIntent(R.id.listing2, getPendingSelfIntent(context, widgets.get(1).ilan_id, appWidgetId)); 
        views.setOnClickPendingIntent(R.id.listing3, getPendingSelfIntent(context, widgets.get(2).ilan_id, appWidgetId)); 
        views.setOnClickPendingIntent(R.id.listing4, getPendingSelfIntent(context, widgets.get(3).ilan_id, appWidgetId)); 
        views.setOnClickPendingIntent(R.id.listing5, getPendingSelfIntent(context, widgets.get(4).ilan_id, appWidgetId)); 

        views.setTextViewText(R.id.listingNameTV, widgets.get(0).firma.isim); 
        views.setTextViewText(R.id.listingNameTV2, widgets.get(1).firma.isim); 
        views.setTextViewText(R.id.listingNameTV3, widgets.get(2).firma.isim); 
        views.setTextViewText(R.id.listingNameTV4, widgets.get(3).firma.isim); 
        views.setTextViewText(R.id.listingNameTV5, widgets.get(4).firma.isim); 
        views.setTextViewText(R.id.positionNameTV, widgets.get(0).ilan_baslik); 
        views.setTextViewText(R.id.positionNameTV2, widgets.get(1).ilan_baslik); 
        views.setTextViewText(R.id.positionNameTV3, widgets.get(2).ilan_baslik); 
        views.setTextViewText(R.id.positionNameTV4, widgets.get(3).ilan_baslik); 
        views.setTextViewText(R.id.positionNameTV5, widgets.get(4).ilan_baslik); 

        Picasso.with(context) 
          .load("http:" + widgets.get(0).firma.logo) 
          .into(views, R.id.widgetIV, new int[]{appWidgetId}); 

        Picasso.with(context) 
          .load("http:" + widgets.get(1).firma.logo) 
          .into(views, R.id.widgetIV2, new int[]{appWidgetId}); 

        Picasso.with(context) 
          .load("http:" + widgets.get(2).firma.logo) 
          .into(views, R.id.widgetIV3, new int[]{appWidgetId}); 

        Picasso.with(context) 
          .load("http:" + widgets.get(3).firma.logo) 
          .into(views, R.id.widgetIV4, new int[]{appWidgetId}); 

        Picasso.with(context) 
          .load("http:" + widgets.get(4).firma.logo) 
          .into(views, R.id.widgetIV5, new int[]{appWidgetId}); 

        // Tell the AppWidgetManager to perform an update on the current app 
        // widget 
        appWidgetManager.updateAppWidget(appWidgetId, views); 
       } 

      } 
     }); 
    } 

    private PendingIntent getPendingSelfIntent(Context context, String action, int appWidgetId) { 
     Intent intent = new Intent(context, getClass()); 
     intent.setAction(action); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 

     return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 

     if (listing1.equals(intent.getAction())){ 
      startApplciationWithIntent(context, listing1); 
     } 

     else if (listing2.equals(intent.getAction())){ 
      startApplciationWithIntent(context, listing2); 
     } 

     else if (listing3.equals(intent.getAction())){ 
      startApplciationWithIntent(context, listing3); 
     } 

     else if (listing4.equals(intent.getAction())){ 
      startApplciationWithIntent(context, listing4); 
     } 

     else if (listing5.equals(intent.getAction())){ 
      startApplciationWithIntent(context, listing5); 
     } 
    } 

    private void startApplciationWithIntent(Context context, String ilanid){ 
     Intent i = new Intent(context, LoggedOutActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     Bundle bundle = new Bundle(); 
     bundle.putString("DeepLink", ilanid); 
     i.putExtras(bundle); 
     context.startActivity(i); 
    } 
} 

清單

<!-- Widget--> 
    <receiver android:name=".Widget" 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" /> 
    </receiver> 
+0

我還沒有解決這個,任何想法? :) –

回答

0

我目前正在尋找解決這個問題,以及,並希望這將有助於一點:

如果你籤的SoundCloud的小部件,你可以看到,當應用程序被殺,

  1. 小部件沒有佈局來指示「關閉」狀態
  2. 你點擊它,它首先啓動應用程序,它會更新小部件的佈局和按鈕
  3. 你再次點擊播放你的音樂。

所以,我想,你應該有一個服務運行,當用戶點擊小部件時,它將首先啓動你的應用程序。

相關問題