2015-02-19 3 views
0

У меня возникла проблема: Я хочу начать ChooseWidgetActivity после размещения виджета на экране.Начать работу после размещения виджета на экране

Я закодирован OnUpdate в WidgetProvider так:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

    for (int i = 0; i < N; i++) { 
     int appWidgetId = appWidgetIds[i]; 

     //--- I'm starting activity here: 
     Intent intent = new Intent(context, WidgetChooseActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 
     //--- 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.widget_layout_icon); 
     views.setOnClickPendingIntent(R.id.widgetIcon, pendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

Но только то, что я получаю WidgetChooseActivity, что начинается сразу же после того, как выбрать виджет с экрана виджетов. Я не могу поместить его на экран, потому что моя деятельность затмевает главный экран Android. Можно ли начать деятельность после положить виджет на экран?

ответ

3

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

<activity android:name=".MyWidgetConfigurationActivity"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> 
    </intent-filter> 
</activity> 

и добавить андроида: настроить запись в метаданных AppWidgetProviderInfo, например:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:configure=".MyWidgetConfigurationActivity" 
    android:initialLayout="@layout/widget_layout" 
    android:minHeight="80dp" 
    android:minWidth="80dp" 
    android:updatePeriodMillis="30000" /> 
0

Да, вы можете использовать обработчик для этого.

Handler handler = new Handler(); 

     handler.postDelayed(new Runnable() { 
      public void run() { 


       try { 
        // here write down the code 

       } catch (ExecutionException e) { 

        e.printStackTrace(); 
       } 

      } 
     }, 2000); 
+0

I Правильный ответ? Я думаю, он хочет отложить показ «Активность» до тех пор, пока пользователь не разместит элемент на экране (например, виджет Gmail) - не задерживайте его, потому что тогда у нас странное действие, если пользователь слишком долго держит виджет, а «Активность» появляется из ниоткуда. – Roval

+0

@jeet Это не полностью решает мою проблему, потому что пользователь всегда задал время, чтобы поместить виджет на главный экран. Если это время, и пользователь все еще держит виджет - myActivity затмевает главный экран и размещение виджета на нем становится невозможным .. – livetwice