Guida allo sviluppo

Local Navigation

Verifica relativa all'esecuzione di una singola istanza dell'applicazione da parte di un dispositivo

Per migliorare l'efficienza dell'applicazione, è necessario accertarsi che il dispositivo BlackBerry esegua una sola istanza quando viene richiamato search() nell'implementazione di ExternalSearchProviderExternalSearchProvider.
  1. Nell'implementazione di ExternalSearchProvider, importare i pacchetti che consentono di individuare le applicazioni in esecuzione sul dispositivo.
    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. In search(), recuperare un handler per l'applicazione.
    public void search(String keywords) {
        int modHandle = CodeModuleManager.getModuleHandle("MyApplication");
  3. Recuperare una matrice di oggetti che rappresentano le applicazioni in esecuzione sul dispositivo.
        ApplicationDescriptor[] allApps = ApplicationManager.getApplicationManager().getVisibleApplications();
    
  4. Esaminare ciascun elemento della matrice per determinare se l'applicazione sia in esecuzione sul dispositivo.
        for(int i = allApps.length -1; i >= 0; --i) {
            if(allApps[i].getModuleHandle() == modHandle) {
  5. Se l'applicazione è in esecuzione, inviare all'applicazione le parole chiave per la ricerca. Richiamare postGlobalEvent() per inviare all'applicazione un messaggio in cui dovrebbe venire visualizzata una schermata con i risultati per le nuove parole chiave. È necessario rilevare un evento globale pubblicato nel GUID del costruttore dell'applicazione.
                int procID = ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
                ApplicationManager.getApplicationManager().postGlobalEvent(procID,
                your application's GUID, 0, 0, keywords, null);
            }
        }
  6. Se l'applicazione non è in esecuzione sul dispositivo, recuperare un oggetto ApplicationDescriptor che rappresenti l'applicazione.
        ApplicationDescriptor[] myAppDes =  CodeModuleManager.getApplicationDescriptors(modHandle);
  7. Avviare l'applicazione. Passare le parole chiave per la ricerca come argomento. Nel costruttore dell'applicazione, è necessario rilevare se sia presente un argomento contenente le parole chiave per la ricerca.
        try {
            ApplicationManager.getApplicationManager().runApplication(new ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
            }
            catch(ApplicationManagerException e)
            {
                // Process the error condition
            }
        }
    }
  8. Nella classe Application, importare il pacchetto net.rim.device.api.system.GlobalEventListener che deve rilevare gli eventi globali.
    import net.rim.device.api.system.GlobalEventListener;
  9. Importare la classe UiApplication.
    import net.rim.device.api.ui.UiApplication;
  10. Registrare l'applicazione per rilevare gli eventi globali, come quello creato nel passaggio 5, e visualizzare la prima schermata.
    public class MySearchProviderApp extends UiApplication implements GlobalEventListener {
        public MySearchProviderApp(String searchKeywords) {
            addGlobalEventListener(this);
            pushScreen(new MySearchScreen(searchKeywords));
        }
  11. Implementare eventOccured() per rispondere agli eventi globali.
        public void eventOccurred(long guid, int data0, int data1, Object object0, Object object1) {
  12. Se l'applicazione è in esecuzione sul dispositivo, chiudere la schermata esistente e visualizzare un'altra schermata.
            if(guid == G53DDE84S97JHVEK390) {
                if(object0 instanceof String) {
                    popScreen();
                    pushScreeen(new MySearchScreen((String) object0));
                    requestForeground();
                }
            }
        }
  13. Verificare le parole chiave per la ricerca negli argomenti per il metodo main. Avviare l'applicazione con le parole chiave fornite oppure con una stringa vuota, se non viene fornita alcuna parola chiave.
        public static void main(String[] args) {
            String searchKeywords = "";
            if(args != null  && args.length > 0) {
                searchKeywords = args[0];
            }
            MySearchProviderApp app = new MySearchProviderApp(searchKeywords);
            app.enterEventDispatcher();
        }
    }

Le informazioni sono state utili? Inviateci i vostri commenti.