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