3

アプリ内でウィジェットをホストしており、ユーザーがいつウィジェットをクリックしたか、またはいつウィジェット構成インテントが開始されたか (構成付きウィジェットの場合) を知る必要があります。

OnUserLeaveHint はオプションではありません。

4

2 に答える 2

2

私はあなたが達成しようとしていることを正確に実行しました。解決策のアイデアは、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 
    }

    ...
    ...
}

::

  • IS_ON_WIDGET_CLICK_KEY-複数のクラスで使用される単なる定数です。リモートビュー設定とここでそれを見ることができます

願っています、私はあなたを助けることができます。

于 2012-12-02T15:56:25.580 に答える
1

ウィジェットを何らかのレイアウトでラップし、onInterceptTouchEvent メソッドをオーバーライドします。

于 2012-12-09T12:41:16.900 に答える