繁体   English   中英

如何从窗口小部件启动配置活动?

[英]How to launch the configuration activity from widget?

没有找到关于这个问题的所有互联网答案。 我一整天都在煎熬,所以我开始思考,没人知道

我在stackoverflow上是新手,英语不是我的母语。 所以,对不起我的英语不好。

好的,这是一个问题。 我用2个按钮创建了一个简单的小部件。 其中一个按钮可以通过单击来启动config.activity。 我该怎么办? 我尝试使用Intent,如下所示:

 Intent i = new Intent(context, ConfigActivity.class);
 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(i);

但是,当我收到意图操作时,会看到下一种情况:config.activity快速启动和关闭,因为appWidgetId无效。

如何从窗口小部件启动配置活动?

您可以使用此代码

        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        Intent launchActivity = new Intent(context, ConfigActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launchActivity, 0);
        titles.setOnClickPendingIntent(R.id.Button, pendingIntent);
        ComponentName thisWidget = new ComponentName(context, Widget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        manager.updateAppWidget(thisWidget, rv);

如果要从Provider类进行更新,请从onUpdate()方法获取小部件ID,如下所示:

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

或者,如果您从ConfigurationActivity更新小部件,则从onCreate方法获取小部件ID,如下所示:

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

从widget_layout中的按钮/图像视图中使小部件启动ConfigurationActivity

    // Create intent pointing to ConfigurationActivity, in this example we are at ConfigurationActivity
    Intent configurationIntent = new Intent(WidgetBarConfiguration.this, WidgetBarConfiguration.class);
    // Create a extra giving the App Widget Id
    configurationIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    // Create a pending intent giving configurationIntent as parameter
    PendingIntent configurationPendingIntent = PendingIntent.getActivity(WidgetBarConfiguration.this, 0, configurationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    // Here we fecth the layout item and give it a action
    RemoteViews views = new RemoteViews(WidgetBarConfiguration.this.getPackageName(), R.layout.widget_bar_layout);
    // Setting onClick event that will lauch ConfigurationActivity
    views.setOnClickPendingIntent(R.id.imageViewSettings, configurationPendingIntent);
    // Updating widget
    mWidgetManager.updateAppWidget(mAppWidgetId, views);
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();

AndroidManifest.xml

<activity
            android:name=".WidgetBarConfiguration"
            android:label="@string/title_activity_widget_configuration"
            android:launchMode="singleInstance"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

看起来lauchMode = "singleInstance"将确保单击时仅显示ConfigurationActivity布局,而不附加任何其他活动布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM