在屏幕上放置小部件后开始 Activity

Start Activity after put widget on screen

我遇到了一个问题: 我想在将小部件放到屏幕上后启动 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,它在从小部件屏幕选择小部件后立即启动。我无法将它放在屏幕上,因为我的 activity 盖过了 android 主屏幕。 activity 将小部件放到屏幕上后是否可以启动?

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

 Handler handler = new Handler(); 

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


                 try {
                    // here write down the code  

                }  catch (ExecutionException e) {

                    e.printStackTrace();
                } 

             }  
        }, 2000);

前段时间我想出了一个解决我的问题的方法...要在 activity 将小部件放在屏幕上之后开始一些 activity ,将其定义在具有特殊意图过滤器的清单,例如:

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