[英]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.