Android: при добавлении данных в Intent не удается загрузить Activity - PullRequest
5 голосов
/ 12 апреля 2010

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

1 Ответ

4 голосов
/ 12 апреля 2010

Я думаю, вам нужен тег <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>
...