如何仅在首次创建应用小部件时显示活动?

时间:2012-11-12 05:19:26

标签: android android-activity android-service android-appwidget

我的应用小部件首次添加到主屏幕时需要进行配置。我想在用户添加小部件后立即打开配置视图。

AppWidgetProvider没有onCreated事件,所以我在onUpdate事件上展示了一个混淆活动,并在SharedConfiguration中存储了一个布尔值,用于标记配置已经显示出来了。有更简单的方法吗?

2 个答案:

答案 0 :(得分:5)

在AppWidgetProvider XML文件中有一个名为android:configure

的属性

您可以使用此指向在应用程序放到主屏幕时启动的活动。例如:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:configure="com.bandsintown.WidgetSettingsActivity"
    android:minWidth="250dp"
    android:minHeight="110dp"
    android:minResizeWidth="180dp"
    android:minResizeHeight="110dp"
    android:resizeMode="vertical|horizontal"
    android:initialLayout="@layout/widget_layout"
    android:updatePeriodMillis="10000" />

在您选择的配置活动中,用户可以做出他们想要的任何选择。您需要获取并存储小部件的ID。在onCreate方法中,获取如下ID:

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null)
    mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

当他们做出选择时,使用此功能将消息发送回主屏幕小部件,以便显示它:

Intent intent = new Intent();
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, intent);

finish();

那将会得到你想要的东西。

答案 1 :(得分:0)

尝试将其添加到onEnabled函数中。将app小部件添加到屏幕时将调用onEnabled

  

onEnabled(Context)这是在App Widget的实例时调用的   第一次创建。例如,如果用户添加两个   App Widget的实例,这只是第一次调用。如果   您需要打开一个新数据库或执行其他只需要的设置   对于所有App Widget实例发生一次,那么这是一个好地方   这样做。

示例

 @Override
    public void onEnabled(Context context) {

    Log.i("INDEX", "WIDGET Enabled");

    AppWidgetManager mgr = AppWidgetManager.getInstance(context); 
    RemoteViews defaultViews = new RemoteViews(context.getPackageName(), R.layout.widget_restart); 
    Intent idefault = new Intent(context, MainActivity.class);
    idefault.putExtra("widget", "1");
    PendingIntent defaultpendingIntent = PendingIntent.getActivity(context, 0, idefault, 0);
    defaultViews.setOnClickPendingIntent(R.id.headWidget, defaultpendingIntent);
    ComponentName comp = new ComponentName(context.getPackageName(), Widget.class.getName()); 
    mgr.updateAppWidget(comp, defaultViews); 
    }

第一次创建窗口小部件时第一次设置窗口小部件的外观时,这将是calle

如果您有任何问题,请随时在评论中提问我:)