Frage

Eigentlich möchte ich eine Anwendung machen, das wird getGlobalEvent und Kontrolle dieses Ereignis durch eine andere benutzerdefinierte Anwendung. Gibt es eine Möglichkeit, dies zu tun. Kann ich globales Ereignis von einer bestimmten Anwendung bekommen? Es ist wie eine Anwendung, die benutzerdefinierte Anwendung in Ihrem Blackberry sperren wird, wenn Sie nach der Anwendung in dieser Verriegelungs App-Liste hinzufügen und das Passwort dann dem Zugriff setzen, wenn u versuchen, die Anwendung zu öffnen, wird es nach einem Passwort fragen, die u in der Sperr App eingestellt .

War es hilfreich?

Lösung

Allgemeine Hinweise

Überprüfen Application

Haben Sie sagen, es kann innerhalb einer Anwendung mehrere Prozesse sein, damit wir Prüfung basierend auf Modulnamen durchführen wird:

 private String getModuleNameByProcessId(int id) {
  String result = null;
  ApplicationManager appMan = ApplicationManager.getApplicationManager();
  ApplicationDescriptor appDes[] = appMan.getVisibleApplications();
  for (int i = 0; i < appDes.length; i++) {
   if (appMan.getProcessId(appDes[i]) == id) {
    result = appDes[i].getModuleName();
    break;
   }
  }
  return result;
 }

Verschieben Anwendung Hintergrund?

Ja, es gibt keine requestBackground () in Application ... also, was Sie tun können, ist requestForeground () auf die nächste beste App, die nicht auf den Vordergrund, und dies wird aktiv App Hintergrund bewegen! Sie können bringen Home-Bildschirm auch mit requestForegroundForConsole () :

 protected int switchForegroundModule() {
  int id = -1;
  ApplicationManager appMan = ApplicationManager.getApplicationManager();
  ApplicationDescriptor appDes[] = appMan.getVisibleApplications();
  for (int i = 0; i < appDes.length; i++) {
   if (!appDes[i].getModuleName().equalsIgnoreCase(STR_MODULE_NAME)) {
    id = appMan.getProcessId(appDes[i]);
    appMan.requestForeground(id);

    // give a time to foreground application
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {     
     e.printStackTrace();
    }    
    break;
   }
  }
  return id;
 }

Globaler Dialog

Nur um eingegebene Passwort Sie Dialog erweitern können, wird es leichter sein Ergebnis zu verbrauchen:

class PaswordDialog extends Dialog {
 private BasicEditField mPwdField = new BasicEditField();

 public PaswordDialog() {
  super(Dialog.D_OK_CANCEL, "Enter password", Dialog.CANCEL, null,
    Dialog.FIELD_HCENTER);
  add(mPwdField);
 }

 public String getPassword() {
  return mPwdField.getText();
 }
}

Und Kennwortprüfmerker wird wie folgt aussehen:

private boolean checkPassword() {
  boolean result = false;
  final PaswordDialog pwdDlg = new PaswordDialog();
  invokeAndWait(new Runnable() {
   public void run() {
    Ui.getUiEngine().pushGlobalScreen(pwdDlg, 0,
      UiEngine.GLOBAL_MODAL);
   }
  });
  result = ((Dialog.OK == pwdDlg.getSelectedValue()) && pwdDlg
    .getPassword().equalsIgnoreCase(STR_PASSWORD));
  return result;
 }

Setzen Sie diese alle zusammen

Beispiel Adress Book App zu blockieren:

public class LockMainApp extends Application {

 private static final String STR_MODULE_NAME = "net_rim_bb_addressbook_app";
 private static final String STR_PASSWORD = "12345";
 int mFGProcessId = -1;

 public LockMainApp() {
  Timer timer = new Timer();
  timer.schedule(mCheckForeground, 1000, 1000);
 }

 public static void main(String[] args) {
  LockMainApp app = new LockMainApp();
  app.enterEventDispatcher();
 }

 TimerTask mCheckForeground = new TimerTask() {
  public void run() {
   int id = ApplicationManager
       .getApplicationManager().getForegroundProcessId();
   if (id != mFGProcessId) {
    mFGProcessId= id;
    String moduleName = getModuleNameByProcessId(mFGProcessId);
    if (moduleName.equalsIgnoreCase(STR_MODULE_NAME)) {
     if (!checkPassword())
      mFGProcessId = switchForegroundModule();

    }
   }
  };
 };
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top