Почему Intent.getAction () моей поисковой активности имеет значение null? - PullRequest
13 голосов
/ 25 апреля 2010

Я следил за документацией SearchManager , но все еще не могу выполнить поиск по одному из действий моего приложения. Из моей активности появляется диалоговое окно «Поиск», я ввожу запрос, нажимаю «Поиск», моя деятельность снова открывается, и я вижу это в журнале:

D/SearchDialog(  584): launching Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
I/SearchDialog(  584): Starting (as ourselves) #Intent;action=android.intent.action.SEARCH;launchFlags=0x10000000;component=com.clinkybot.geodroid2/.views.Waypoints;S.user_query=sdaf;S.query=sdaf;end
I/ActivityManager(  584): Starting activity: Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
D/WAYPOINTS( 1018): NI Intent { cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
D/WAYPOINTS( 1018): NI null
D/WAYPOINTS( 1018): NI false 

Мне кажется, что все хорошо вплоть до последних трех строк. Строки «NI»: getIntent().toString(), getIntent().getAction() и getIntent().hasExtra(SearchManager.QUERY) соответственно.

ActivityManager, похоже, начинает мою деятельность с правильного действия. Тогда, когда моя деятельность начинается, она не содержит никаких действий !? Что я делаю не так?

Соответствующая часть моего манифеста:

<activity android:name=".views.Waypoints" android:label="Waypoints" android:launchMode="singleTop">
   <intent-filter>
    <action android:name="android.intent.action.SEARCH" />
    <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
   <meta-data android:name="android.app.searchable"
    android:resource="@xml/searchable" />
  </activity>

1 Ответ

16 голосов
/ 27 апреля 2010

Это заняло слишком много часов в моей жизни. При выполнении поиска по поисковой активности singleTop (в моем случае Waypoints) вы должны переопределить onNewIntent () и захватить поисковый запрос там. Что через несколько часов я делал. Уловка была в том, что getIntent () не возвращает Intent, использованный для вызова действия (голова взрывается). Кажется, он возвращает исходное намерение, открывшее мою поисковую активность до того, как я выполнил свой первый поиск .

Метод onNewIntent получает цель поиска. Я заменил getIntent () на параметр из onNewIntent () и boom, progress.

Хотя я должен признать; Понимание этого облегчает разочарование от неспособности избежать звука Танцы со звездами , вспыхивающими на заднем плане.

...