J'ai une recherche de gestion d'activité (ACTIVITY_1), qui fonctionne parfaitement lorsque j'utilise la recherche (via le bouton SEARCH sur le téléphone) dans/depuis cette activité.Android: transmettre des requêtes de recherche à une seule activité qui gère la recherche
Cependant, quand j'utiliser la recherche d'une autre activité (ACTIVITY_2..x) en mettant en œuvre onNewIntent
et en aval de la chaîne de requête à mon Search_Activity.class (ACTIVITY_1)
@Override
protected void onNewIntent(Intent intent) {
Log.i(TAG, "onNewIntent()");
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
Log.i(TAG, "===== Intent: ACTION_SEARCH =====");
Intent myIntent = new Intent(getBaseContext(), Search_Activity.class);
myIntent.setAction(Intent.ACTION_SEARCH);
myIntent.putExtra(SearchManager.QUERY, intent.getStringExtra(SearchManager.QUERY));
startActivity(myIntent);
}
}
il interrompt toujours ACTIVITY_2 d'abord, puis passe à onCreate() de ACTIVITY_2.
- Pourquoi est-il mon recréent ACTIVITY_2 quand il est déjà là et ne va pas onNewIntent directement?
- Existe-t-il un autre moyen de transférer directement les requêtes de recherche vers ACTIVITY_1? Par exemple via un paramètre dans le fichier Manifest.xml
- Est-il possible de transférer automatiquement toutes les requêtes de recherche automatiquement à ACTIVITY_1 sans même implémenter
onNewIntent
dans toutes les autres activités?
Actuellement, je dois mettre un <intent-filter>
dans chaque activité à « activer » ma recherche personnalisée là-bas et transmettre la requête puis à l'activité qui gère la recherche via le onNewIntent
(comme indiqué ci-dessus).
<activity android:name=".Another_Activity"
android:theme="@style/MyTheme">
<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>
Merci beaucoup Reto. Vous savez quoi? C'est l'une des choses que j'ai lues dans la documentation de SearchManager et je l'ai eu dès le premier jour où j'ai essayé d'implémenter la recherche. Cependant, au lieu de ma propre recherche, elle apparaissait toujours sur Google Web Search. Et j'ai finalement compris pourquoi: je viens d'avoir une faute de frappe stupide dans mon android: valeur = ". ACTIVITY_1", donc Android n'a jamais trouvé la bonne activité et donc directement à la recherche sur le web. Merci de m'avoir obligé à revoir cette paix du code. – znq
par les docs, la balise meta-data va dans l'activité de la source, pas à l'application. –