Guía de desarrollo

Local Navigation

Asegurar que un dispositivo ejecuta una sola instancia de su aplicación

Para mejorar la eficiencia de su aplicación, debe asegurarse de que el dispositivoBlackBerry ejecuta sólo una instancia cuando se invoca search() en su implementación de ExternalSearchProvider.
  1. En su implementación de ExternalSearchProvider, los paquetes de importación le ayudan a descubrir las aplicaciones que se están ejecutando en el 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. En search(), recupere un identificador para su aplicación.
    public void search(String keywords) {
        int modHandle = CodeModuleManager.getModuleHandle("MyApplication");
  3. Recupere una matriz de objetos que representan las aplicaciones que se están ejecutando en el dispositivo.
        ApplicationDescriptor[] allApps = ApplicationManager.getApplicationManager().getVisibleApplications();
    
  4. Examine cada elemento de la matriz para determinar si su aplicación se está ejecutando en el dispositivo.
        for(int i = allApps.length -1; i >= 0; --i) {
            if(allApps[i].getModuleHandle() == modHandle) {
  5. Si es así, envíele las palabras clave de la búsqueda. Invoque postGlobalEvent() para enviar un mensaje a su aplicación que debe mostrar una pantalla con los resultados para las palabras clave nuevas. Debe detectar un evento global publicado en su GUID, en el constructor de su aplicación.
                int procID = ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
                ApplicationManager.getApplicationManager().postGlobalEvent(procID,
                your application's GUID, 0, 0, keywords, null);
            }
        }
  6. Si su aplicación no se está ejecutando en el dispositivo, recupere un objeto ApplicationDescriptor que represente a su aplicación.
        ApplicationDescriptor[] myAppDes =  CodeModuleManager.getApplicationDescriptors(modHandle);
  7. Inicie su aplicación. Pase las palabras clave de la búsqueda como un argumento. En el constructor de su aplicación, debe detectar si hay un argumento que contiene palabras clave de búsqueda.
        try {
            ApplicationManager.getApplicationManager().runApplication(new ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
            }
            catch(ApplicationManagerException e)
            {
                // Process the error condition
            }
        }
    }
  8. En su clase de aplicación, importe el paquete net.rim.device.api.system.GlobalEventListener para escuchar eventos globales.
    import net.rim.device.api.system.GlobalEventListener;
  9. Importe la clase UiApplication.
    import net.rim.device.api.ui.UiApplication;
  10. Registre su aplicación para rastrear eventos globales, como el que creó en el paso 5 y muestre su primera pantalla.
    public class MySearchProviderApp extends UiApplication implements GlobalEventListener {
        public MySearchProviderApp(String searchKeywords) {
            addGlobalEventListener(this);
            pushScreen(new MySearchScreen(searchKeywords));
        }
  11. Implemente eventOccured() para responder a eventos globales.
        public void eventOccurred(long guid, int data0, int data1, Object object0, Object object1) {
  12. Si su aplicación se está ejecutando en el dispositivo, cierre la pantalla existente y muestre otra pantalla.
            if(guid == G53DDE84S97JHVEK390) {
                if(object0 instanceof String) {
                    popScreen();
                    pushScreeen(new MySearchScreen((String) object0));
                    requestForeground();
                }
            }
        }
  13. Pruebe las palabras clave de búsqueda en los argumentos para el método main. Inicie su aplicación con las palabras clave dadas o con una cadena vacía si no las hay.
        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 ha resultado útil esta información? Envíenos sus comentarios.