Guide de développement

Local Navigation

Vérifier qu'un terminal n'exécute qu'une seule instance de votre application

Pour améliorer l'efficacité de votre application, assurez-vous que le terminal BlackBerry n'exécute qu'une seule instance lorsque search() est appelé dans votre implémentation de ExternalSearchProvider.
  1. Dans votre implémentation de ExternalSearchProvider, importez les packages qui vous aideront à identifier les applications s'exécutant sur le terminal.
    import net.rim.device.api.system.ApplicationDescriptor;
    import net.rim.device.api.system.ApplicationManager;
    import net.rim.device.api.system.ApplicationManagerException;
    import net.rim.device.api.system.CodeModuleManager;
  2. Dans search(), récupérez un identificateur pour votre application.
    public void search(String keywords) {
        int modHandle = CodeModuleManager.getModuleHandle("MyApplication");
  3. Récupérez un tableau d'objets qui représentent les applications qui s'exécutent sur le terminal.
        ApplicationDescriptor[] allApps = ApplicationManager.getApplicationManager().getVisibleApplications();
    
  4. Examinez chaque élément du tableau pour déterminer si votre application s'exécute sur le terminal.
        for(int i = allApps.length -1; i >= 0; --i) {
            if(allApps[i].getModuleHandle() == modHandle) {
  5. Si votre application s'exécute, envoyez-lui les mots-clés de recherche. Appelez postGlobalEvent() pour envoyer à votre application un message devant afficher un écran avec les résultats des nouveaux mots-clés. Vous devez détecter un événement global posté dans votre GUID dans le constructeur de votre application.
                int procID = ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
                ApplicationManager.getApplicationManager().postGlobalEvent(procID,
                your application's GUID, 0, 0, keywords, null);
            }
        }
  6. Si votre application n'est pas en cours d'exécution sur le terminal, récupérez un objet ApplicationDescriptor représentant votre application.
        ApplicationDescriptor[] myAppDes =  CodeModuleManager.getApplicationDescriptors(modHandle);
  7. Démarrez votre application. Transmettez les mots-clés de recherche sous forme d'argument. Dans le constructeur de votre application, vous devez détecter s'il existe un argument qui contient les mots-clés de recherche.
        try {
            ApplicationManager.getApplicationManager().runApplication(new ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
            }
            catch(ApplicationManagerException e)
            {
                // Process the error condition
            }
        }
    }
  8. Dans votre classe d'application, importez le package net.rim.device.api.system.GlobalEventListener pour écouter les événements globaux.
    import net.rim.device.api.system.GlobalEventListener;
  9. Importez la classe UiApplication.
    import net.rim.device.api.ui.UiApplication;
  10. Enregistrez votre application pour détecter les événements globaux, comme celui que vous avez créé à l'étape 5, et affichez votre premier écran.
    public class MySearchProviderApp extends UiApplication implements GlobalEventListener {
        public MySearchProviderApp(String searchKeywords) {
            addGlobalEventListener(this);
            pushScreen(new MySearchScreen(searchKeywords));
        }
  11. Implémentez eventOccured() pour répondre aux événements globaux.
        public void eventOccurred(long guid, int data0, int data1, Object object0, Object object1) {
  12. Si votre application s'exécute sur le terminal, fermez l'écran actuel et affichez un autre écran.
            if(guid == G53DDE84S97JHVEK390) {
                if(object0 instanceof String) {
                    popScreen();
                    pushScreeen(new MySearchScreen((String) object0));
                    requestForeground();
                }
            }
        }
  13. Testez les mots-clés de recherche dans les arguments de la méthode main. Démarrez votre application avec les mots-clés donnés, ou avec une chaîne vide si aucun mots-clé n'est donné.
        public static void main(String[] args) {
            String searchKeywords = "";
            if(args != null  && args.length > 0) {
                searchKeywords = args[0];
            }
            MySearchProviderApp app = new MySearchProviderApp(searchKeywords);
            app.enterEventDispatcher();
        }
    }

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.