ブラウザジャンプの注意
JSCLもしくは、MEXA Unit1に対応している端末であれば
BrowserConnectionクラスを使用することでブラウザジャンプを行うことができる。
BrowserConnectionクラスに対応していないのは以下の端末である。
- SEシリーズ
- NKシリーズ
- MOシリーズ
- Pシリーズ
- 804N以降のNシリーズ
- 804SS
これらの端末は、MIDP2.0で標準とされている
MIDlet#platformRequestメソッドを使用することによってブラウザジャンプを行うことができる。
各APIのブラウザジャンプの例は以下となる。
★ BrowserConnectionクラスを使用した場合
★ MIDlet#platformRequestメソッドを使用した場合
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) {
}
}
どちらのbrowserJumpメソッドも渡す文字列は、"http:"から始まるURLである。
Midlet mlt; // すでにメインクラスが代入されているとするfinal public void browserJump(String url) {
try {
mlt.platformRequest(url);
} catch(Exception e) {
}
}
使用例)
なお、私の場合はプリプロセッサを使用しているので、ブラウザジャンプを行うメソッドは以下となる。
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 のクラスパスを設定していない可能性がありますので
正しく設定しているかどうかを確認してください。