5

ユーザーがウィジェット本体をクリックすると、メインアプリのアクティビティを呼び出すウィジェットがあります。私のセットアップは単一のウィジェット インスタンスに対して機能しますが、同じウィジェットの 2 番目のインスタンスに対して PendingIntent が再利用され、その結果、追加として送信している重要な情報が最初のインスタンスに対して上書きされます。したがって、ウィジェット ID をIntentデータとして渡す必要があると考えましたが、追加するとすぐにIntent#setDataログに 2 つの個別のインテントが適切に起動されていることがわかりますが、アクティビティはそれを取得できないため、基本的にアクティビティは起動せず、何も起こりません (いいえerror または warning ether) マニフェストでアクティビティを設定する方法は次のとおりです。

    <activity android:name=".SearchResultsView" 
         android:label="@string/search_results"
        <intent-filter>
            <action android:name="bostone.android.search.RESULTS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

そして、これがクリックを処理するために設定されたコードです

Intent di = new Intent("bostone.android.search.RESULTS");
di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// if line below is commented out - the Activity will start
di.setData(ContentUris.withAppendedId(Uri.EMPTY, widgetId));
di.putExtra("URL", url);
views.setOnClickPendingIntent(R.id.widgetContent, 
    PendingIntent.getActivity(this, 0, di, 0));

メインアプリとウィジェットは、それぞれ独自のパッケージとマニフェストに 2 つの個別の APK としてパッケージ化されています

4

1 に答える 1

4

登録したインテントフィルターと一致するように発火するインテントのために、<data>タグが必要だと思います。<intent-filter>

https://developer.android.com/guide/topics/manifest/data-element.html

Uri.EMPTY の使用も問題になる場合があります。setData() 呼び出しが次のようになるように、独自の Uri スキームを作成します。

di.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"), String.valueOf(appWidgetId)));

インテントフィルターは次のようになります。

    <intent-filter>
        <action android:name="bostone.android.search.RESULTS" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="droidln"/>
    </intent-filter>
于 2010-04-11T21:45:51.427 に答える