ブラウザジャンプの注意

JSCLもしくは、MEXA Unit1に対応している端末であれば
BrowserConnectionクラスを使用することでブラウザジャンプを行うことができる。


BrowserConnectionクラスに対応していないのは以下の端末である。

  • SEシリーズ
  • NKシリーズ
  • MOシリーズ
  • Pシリーズ
  • 804N以降のNシリーズ
  • 804SS

これらの端末は、MIDP2.0で標準とされている
MIDlet#platformRequestメソッドを使用することによってブラウザジャンプを行うことができる。


APIのブラウザジャンプの例は以下となる。


★ BrowserConnectionクラスを使用した場合


final public void browserJump(String url) {
try {
BrowserConnection bcon = (BrowserConnection)Connector.open("url:" + url.substring(url.indexOf("http:")+1));
bcon.connect();
bcon.close();
} catch(Exception e) {
}
}
★ MIDlet#platformRequestメソッドを使用した場合

Midlet mlt; // すでにメインクラスが代入されているとする

final public void browserJump(String url) {
try {
mlt.platformRequest(url);
} catch(Exception e) {
}
}

どちらのbrowserJumpメソッドも渡す文字列は、"http:"から始まるURLである。


使用例)

browserJump("http://www.hogehoge.com/index.html");
なお、私の場合はプリプロセッサを使用しているので、ブラウザジャンプを行うメソッドは以下となる。

Midlet mlt; // すでにメインクラスが代入されているとする

final public void browserJump(String url){
try {
#ifdef (3GC)
mlt.platformRequest(url);
#else
BrowserConnection bcon = (BrowserConnection)Connector.open("url:" + url.substring(url.indexOf('http:') + 1));
bcon.connect();
bcon.close();
#endif
} catch(Exception e) {
}
}



★ 注意事項
MIDlet#platformRequestを使用した際に
サイトへ飛べなかったり、V803Tではアプリケーションエラーが発生していたことがありました。


原因を追究したところ、MIDlet#platformRequestを呼んだ直後に
MIDlet#notifyDestroyedを呼んで、アプリを終了させていることが原因でした。
BrowserConnectionのブラウザ起動の直後にMIDlet#notifyDestroyedを
呼んでいても、問題が発生しないようです。


推測ですが、BrowserConnectionでのブラウザ起動はシングルスレッドで行われるものであり
MIDlet#platformRequestでのブラウザ起動はマルチスレッドで行われるものなのでしょう。
MIDlet#platformRequestの後にThread#sleep(2000)を間に挟んだところ、問題なくブラウザ起動が
行われ、その後アプリは正常に終了してくれました。


―――――――――――――――――――― 07/03/12 追記 ――――――――――――――――――――
705Pでブラウザジャンプが行えない場合があります。
これは通信ピクト表示中、ネイティブのブラウザ起動ができないという端末制限のようです。


―――――――――――――――――――― 07/09/03 追記2 ――――――――――――――――――――
検索で良くある項目の中に、「platformRequest Permissions」というのがあるので記載しておきますが
platformRequestメソッドを使用する際にパーミッションの設定は必要ありません。
正しく処理ができない人は、コンパイルするときに MIDP2.0 のクラスパスを設定していない可能性がありますので
正しく設定しているかどうかを確認してください。