5

我有一个小部件,当用户单击小部件主体时,它应该调用主应用程序的 Activity。我的设置适用于单个小部件实例,但对于同一小部件​​的第二个实例,PendingIntent 被重用,因此我作为额外发送的重要信息被第一个实例覆盖。所以我认为我应该将小部件 ID 作为Intent数据传递,但是一旦我添加Intent#setData,我会在日志中看到 2 个单独的 Intent 被适当地触发但 Activity 无法拾取它,所以基本上 Activity 不会出现并且没有任何反应(没有错误或警告以太)以下是清单中活动的设置方式:

    <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,每个 APK 在其自己的包和清单中

4

1 回答 1

4

我认为您需要一个<data>标签,<intent-filter>以便您触发的意图与您注册的意图过滤器相匹配。

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

也使用 Uri.EMPTY 可能是一个问题。我会创建您自己的 Uri 方案,以便您的 setData() 调用看起来像:

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 回答