У меня есть виджет, который предположил для вызова Действия главного приложения, когда пользователь нажимает на тело виджета. Мои работы установки для единственного экземпляра виджета, но для второго экземпляра того же виджета, PendingIntent снова используется и как результат важная информация, которую я отправляю как дополнительный, перезаписываются для 1-го экземпляра. Таким образом, я полагал, что должен передать идентификатор виджета как Intent
данные однако, как только я добавляю Intent#setData
Я видел бы в журнале, что 2 отдельных Намерения соответственно запущены, но Действию не удается взять его так в основном, Действие не подойдет, и ничего не происходит (никакая ошибка, или предупреждение эфира) Вот то, как действие является установкой в Декларации:
<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 каждый в его собственном пакете и Декларации
Думаю, вам понадобится тег
в вашем
, чтобы намерение, которое вы запускаете, соответствует зарегистрированному вами фильтру намерений.
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>