2012-02-26 6 views
0

Мне нужно получить конкретный appWidgetId в AppWidgetProvider, а не пакет appWidgetIds [], но конкретный идентификатор, который пользователь нажал.Как получить appWidgetId в AppWidgetProvider?

я мог бы получить его в своей деятельности конфигурирования, используя «intent.getExtra(). GetInt (AppWidgetManager.APP_WIDGET_ID)» говорит как 504.

Но это настолько отличается в AppWidgetProvider, буду признателен если кто-нибудь даст мне руку. Спасибо заранее.

public class WidgetBox extends AppWidgetProvider implements Widget { 

private int _widgetId = ?; // not appWidgetIds[] 

} 

ответ

0

Вы получите массив идентификаторов, когда вызываются методы жизненного цикла виджета. Вы можете просто перебирать предоставленные идентификаторы, как это:

@Override 
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { 
    final int n = appWidgetIds.length; 
    for(int i = 0; i < n; i++) { 
     final int appWidgetId = appWidgetIds[i]; 
     // some logic here 
    } 
} 

, если вам нужно вызвать какое-либо действие, это делается с помощью отложенного намерения во время конфигурации (или более поздней версии обновления):

final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 
final Intent defineIntent = new Intent(context, YourTargetActivity.class); 
defineIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 /* no request code */, defineIntent, 0); 
views.setOnClickPendingIntent(R.id.view_id, pendingIntent); 
+0

Что это appWidgetIDs? Почему это серия? И почему мы делаем один и тот же процесс для всех элементов appWidgetIds? – atasoyh

+1

Пользователь может развернуть один и тот же виджет несколько раз (возможно, с разными настройками, например, закатом в разных местах). API предоставляет onUpdate() массив идентификаторов всех виджетов. – Stefan