Certificar-se de que um aparelho execute uma única instância de seu aplicativo

Para melhorar a eficiência de seu aplicativo, você deve certificar-se de que o aparelho BlackBerry execute apenas uma instância quando search() for invocado em sua implementação de ExternalSearchProvider.
  1. Em sua implementação de ExternalSearchProvider, importe pacotes que o ajudarão a descobrir quais aplicativos são executados no aparelho.
    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. Em search(), recupere um controle para seu aplicativo.
    public void search(String keywords) {
        int modHandle = CodeModuleManager.getModuleHandle("MyApplication");
  3. Recupere uma matriz de objetos que representam os aplicativos executados no aparelho.
        ApplicationDescriptor[] allApps = ApplicationManager.getApplicationManager().getVisibleApplications();
    
  4. Examine cada elemento da matriz para determinar se o seu aplicativo é executado no aparelho.
        for(int i = allApps.length -1; i >= 0; --i) {
            if(allApps[i].getModuleHandle() == modHandle) {
  5. Se o seu aplicativo estiver sendo executado, envie as palavras-chave de pesquisa a ele. Invoque postGlobalEvent() para enviar ao seu aplicativo uma mensagem de que ele deve exibir uma tela com os resultados para as novas palavras-chave. Você deve detectar um evento global que é publicado para seu GUID no construtor do aplicativo.
                int procID = ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
                ApplicationManager.getApplicationManager().postGlobalEvent(procID,
                your application's GUID, 0, 0, keywords, null);
            }
        }
  6. Se o seu aplicativo não estiver sendo executado no aparelho, recupere um objeto ApplicationDescriptor que representa seu aplicativo.
        ApplicationDescriptor[] myAppDes =  CodeModuleManager.getApplicationDescriptors(modHandle);
  7. Inicie seu aplicativo. Passe as palavras-chave de pesquisa como um argumento. No construtor do aplicativo, você deve detectar se há um argumento que contém palavras-chave de pesquisa.
        try {
            ApplicationManager.getApplicationManager().runApplication(new ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
            }
            catch(ApplicationManagerException e)
            {
                // Process the error condition
            }
        }
    }
  8. Na classe do aplicativo, importe o pacote net.rim.device.api.system.GlobalEventListener para escutar eventos globais.
    import net.rim.device.api.system.GlobalEventListener;
  9. Importe a classe UiApplication.
    import net.rim.device.api.ui.UiApplication;
  10. Registre o aplicativo para escutar eventos globais, como o que você criou na etapa 5 e exiba a primeira tela.
    public class MySearchProviderApp extends UiApplication implements GlobalEventListener {
        public MySearchProviderApp(String searchKeywords) {
            addGlobalEventListener(this);
            pushScreen(new MySearchScreen(searchKeywords));
        }
  11. Implemente eventOccured() para responder a eventos globais.
        public void eventOccurred(long guid, int data0, int data1, Object object0, Object object1) {
  12. Se o seu aplicativo estiver sendo executado no aparelho, feche a tela existente e exiba outra tela.
            if(guid == G53DDE84S97JHVEK390) {
                if(object0 instanceof String) {
                    popScreen();
                    pushScreeen(new MySearchScreen((String) object0));
                    requestForeground();
                }
            }
        }
  13. Teste as palavras-chave de pesquisa nos argumentos para o método main. Inicie seu aplicativo com as palavras-chave que são fornecidas ou com uma string vazia se nenhuma palavra-chave estiver disponível.
        public static void main(String[] args) {
            String searchKeywords = "";
            if(args != null  && args.length > 0) {
                searchKeywords = args[0];
            }
            MySearchProviderApp app = new MySearchProviderApp(searchKeywords);
            app.enterEventDispatcher();
        }
    }

Estas informações foram úteis? Gostaríamos de receber seus comentários.