アプリ内でウィジェットをホストしており、ユーザーがいつウィジェットをクリックしたか、またはいつウィジェット構成インテントが開始されたか (構成付きウィジェットの場合) を知る必要があります。
OnUserLeaveHint はオプションではありません。
アプリ内でウィジェットをホストしており、ユーザーがいつウィジェットをクリックしたか、またはいつウィジェット構成インテントが開始されたか (構成付きウィジェットの場合) を知る必要があります。
OnUserLeaveHint はオプションではありません。
私はあなたが達成しようとしていることを正確に実行しました。解決策のアイデアは、is_clicked=trueのバンドルパラメーターを使用してウィジェットにOnClickpendingインテントを設定することです。
これがあなたにできることです:
1. RemoteViewを使用してウィジェットのレイアウトを設定したのと同じ場所で、次の手順を実行します。
/*
* Create pending intent to configuration activity
*/
Intent intent = new Intent(context, ConfigurationMainActivity.class);
/*
* Add values with this intent: widget id, and is_clicked = true
*/
Bundle extra = new Bundle();
extra.putInt(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
extra.putBoolean(ConfigurationMainActivity.IS_ON_WIDGET_CLICK_KEY, true);
intent.putExtras(extra);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
/*
* Set this intent to one of the views in the widget
*/
remoteViews.setOnClickPendingIntent(R.id.widget_main, pendingIntent);
2.
ユーザーがウィジェットをクリックすると、ConfigurationMainActivity
アクティビティが開きます。このアクティビティでは、次のコーディングを行います。
public static final String IS_ON_WIDGET_CLICK_KEY = "IS_ON_WIDGET_CLICK_KEY";
@Override
protected void onCreate(Bundle savedInstanceState)
{
// some usual stuff
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
// get the widget id that was transferred from on click event
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
// ---> here is what you asking for --->
// check whereas the widget was clicked by the user or not
boolean isOnWidgetClick = extras.getBoolean(IS_ON_WIDGET_CLICK_KEY, false);
if (isOnWidgetClick)
{
// ----- Do here whatever you want ------
}
else
{
// the code of first time widget configuration
}
...
...
}
注::
願っています、私はあなたを助けることができます。
ウィジェットを何らかのレイアウトでラップし、onInterceptTouchEvent メソッドをオーバーライドします。