2012-06-27 5 views
6

システム起動時に実行されるバックグラウンドアプリを作成しようとしています。手動で(リボンから)実行すると、画面が表示されますが、スタートアップアプリケーション(起動時にディスクリプタのオプションで自動実行)を実行した後にアプリケーションを実行すると、画面に何も表示されません。私は次のコードを試しています。BlackBerry App:画面が自動実行モードで表示されない

public class AppClass extends UiApplication { 

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

    public AppClass() { 
     pushScreen(new AppScreen()); 
    } 
} 

これは画面クラスです。

public final class AppScreen extends MainScreen { 

    private LabelField label; 

    public AppScreen() { 
     setTitle("AppTitle"); 

     label = new LabelField(); 
     label.setText("Ready."); 

     add(label); 
    } 
} 

起動時に自動実行されるか手動で実行されるかに関係なく、その画面が表示されるようにすることが期待されます。期待どおりに動作させるために何かをする必要がある場合は、私にそのことを教えてください。私はBlackBerry開発の初心者です。 私は以下の環境で開発中です。

  • ブラックベリーJDE Eclipseプラグイン1.5.0
  • ブラックベリーOS 4.5

答えて

2

画面が表示されるように、AppScreenクラスのコンストラクタからgetApplication().requestForeground();を呼び出してください。

public final class AppScreen extends MainScreen { 

    private LabelField label; 

    public AppScreen() { 
     setTitle("AppTitle"); 

     label = new LabelField(); 
     label.setText("Ready."); 

     add(label); 

     getApplication().requestForeground(); 
    } 
} 

アプリがバックグラウンドで実行されると、我々は、UI要素を表示するには、明示的に前面にそれを持参する必要があり、それは我々がここでやっていることです。

5

オートは、ユーザーインターフェイスのための任意のサポートがないので、OSの起動が完了する前にアプリケーションが実行され始めます。私はあなたのアプリケーションが起動されているが、いくつかのUIコールで失敗していると思われる。自動実行してホーム画面から実行するアプリケーションを記述する方法は、プログラムが自動実行されたことを示す引数を使用して、自動実行のエントリポイントを交互に提供することです。次に、APIを使用して、OSがUIアプリケーションの準備が整うまで待ちます。

public class AppClass extends UiApplication { 
    public static void main(String[] args) { 

     if (args.length > 0 && args[0].equals("auto-run")) { 
      // auto start, wait for OS 
      while (ApplicationManager.getApplicationManager().inStartup()) { 
       Thread.sleep(10000); 
      } 

      /* 
      ** Do auto-run UI stuff here 
      */ 
     } else { 
      AppClass theApp = new AppClass(); 
      theApp.enterEventDispatcher(); 
     } 
    } 

    public AppClass() { 
     pushScreen(new AppScreen()); 
    } 
} 
+0

ありがとうございます。私はそれを試してみましょう。 – Mudassir

関連する問題