将小部件放在屏幕上后启动活动

时间:2015-02-19 09:29:41

标签: android android-appwidget

我遇到了一个问题: 我想在屏幕上放置小部件后启动ChooseWidgetActivity。

我在WidgetProvider中编写了onUpdate,就像那样:

@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主屏幕。 是否可以在将小部件放在屏幕上后启动活动?

2 个答案:

答案 0 :(得分:4)

前段时间我想出了一个问题的解决方案......要在之后启动一些活动将小部件放在屏幕上,就足以在清单中使用特殊的intent-filter定义它,例如:

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

并在AppWidgetProviderInfo元数据中添加 android:configure 条目,例如:

<?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" />

答案 1 :(得分:0)

是的,您可以使用处理程序。

 Handler handler = new Handler(); 

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


                 try {
                    // here write down the code  

                }  catch (ExecutionException e) {

                    e.printStackTrace();
                } 

             }  
        }, 2000);