Sicherstellen, dass ein Gerät eine einzelne Instanz Ihrer Anwendung ausführt

Um die Effizienz Ihrer Anwendung zu verbessern, sollten Sie sicherstellen, dass das BlackBerry-Gerät nur eine Instanz von search() ausführt, wenn ExternalSearchProvider in Ihrer Implementierung aufgerufen wird.
  1. Importieren Sie in Ihrer Implementierung von ExternalSearchProvider Pakete, um einfacher zu erkennen, welche Anwendungen auf dem Gerät ausgeführt werden.
    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. Rufen Sie unter search() ein Handle für Ihre Anwendung ab.
    public void search(String keywords) {
        int modHandle = CodeModuleManager.getModuleHandle("MyApplication");
  3. Rufen Sie ein Array von Objekten ab, das die Anwendungen darstellt, die auf dem Gerät ausgeführt werden.
        ApplicationDescriptor[] allApps = ApplicationManager.getApplicationManager().getVisibleApplications();
    
  4. Untersuchen Sie jedes Element des Arrays, um zu bestimmen, ob Ihre Anwendung auf dem Gerät ausgeführt wird.
        for(int i = allApps.length -1; i >= 0; --i) {
            if(allApps[i].getModuleHandle() == modHandle) {
  5. Wenn Ihre Anwendung ausgeführt wird, senden Sie ihr die Stichwörter für die Suche. Rufen Sie postGlobalEvent() auf, um Ihrer Anwendung eine Nachricht zu senden, damit diese einen Bildschirm mit den Ergebnissen für die neuen Stichwörter anzeigt. Sie müssen ein globales Ereignis erkennen, das in der GUID im Konstruktor Ihrer Anwendung veröffentlicht wurde.
                int procID = ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
                ApplicationManager.getApplicationManager().postGlobalEvent(procID,
                your application's GUID, 0, 0, keywords, null);
            }
        }
  6. Wenn Ihre Anwendung nicht auf dem Gerät ausgeführt wird, rufen Sie ein ApplicationDescriptor-Objekt ab, das Ihre Anwendung darstellt.
        ApplicationDescriptor[] myAppDes =  CodeModuleManager.getApplicationDescriptors(modHandle);
  7. Starten Sie Ihre Anwendung. Übergeben Sie die Suchwörter als Argument. Im Konstruktor Ihrer Anwendung müssen Sie erkennen, ob es ein Argument gibt, das die Suchwörter enthält.
        try {
            ApplicationManager.getApplicationManager().runApplication(new ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
            }
            catch(ApplicationManagerException e)
            {
                // Process the error condition
            }
        }
    }
  8. Importieren Sie das net.rim.device.api.system.GlobalEventListener-Paket in Ihrer Anwendungsklasse, um globale Ereignisse abzufragen.
    import net.rim.device.api.system.GlobalEventListener;
  9. Importieren Sie die UiApplication-Klasse.
    import net.rim.device.api.ui.UiApplication;
  10. Registrieren Sie Ihre Anwendung, um globale Ereignisse abzufragen, wie z. B. das, das Sie in Schritt 5 erstellt haben, und zeigen Sie Ihren ersten Bildschirm an.
    public class MySearchProviderApp extends UiApplication implements GlobalEventListener {
        public MySearchProviderApp(String searchKeywords) {
            addGlobalEventListener(this);
            pushScreen(new MySearchScreen(searchKeywords));
        }
  11. Implementieren Sie eventOccured(), um auf globale Ereignisse zu reagieren.
        public void eventOccurred(long guid, int data0, int data1, Object object0, Object object1) {
  12. Wenn Ihre Anwendung auf dem Gerät ausgeführt wird, schließen Sie den vorhandenen Bildschirm, und zeigen Sie einen anderen Bildschirm an.
            if(guid == G53DDE84S97JHVEK390) {
                if(object0 instanceof String) {
                    popScreen();
                    pushScreeen(new MySearchScreen((String) object0));
                    requestForeground();
                }
            }
        }
  13. Prüfen Sie die Argumente für die main-Methode auf Suchstichwörter. Starten Sie Ihre Anwendung mit den vorgegebenen Suchwörtern oder mit einer leeren Zeichenfolge, wenn keine Suchwörter vorgegeben sind.
        public static void main(String[] args) {
            String searchKeywords = "";
            if(args != null  && args.length > 0) {
                searchKeywords = args[0];
            }
            MySearchProviderApp app = new MySearchProviderApp(searchKeywords);
            app.enterEventDispatcher();
        }
    }

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.