Webを表示しませう | Android系女史

Android系女史

Android開発など雑多なプログラムの愚痴でもしています。

さて、C++ -> Javaの呼び出しが出来たところで
JavaでWebページを開きます。

方法は2つ

1. アプリからブラウザを立ち上げてWebページを開く
2. アプリ内でWebページを開く

でやりたいことは後者。
前者の場合は


Uri uri = Uri.parse("http://google.co.jp);
Intent i = new Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
で終了。

しかし、SetActivityはstaticメソッドから呼び出せないので
CallStaticVoidMethodではなくCallVoidMethodで呼び出さないといけない。
ついでにCallVoidMethodは引数にjclassではなくjobjectをとるので
Java -> C++の関数を呼び出すときに渡されるjobjectをグローバル変数として保存して使いまわし。
jobjectはNewObject関数で作成も出来るけど
元のJavaクラスとは違うインスタンスになる為なのか何なのか
startActivityするとエラーが出るのでこういう場合は使えない。

でもJNIEnvはグローバル変数として保存->使いまわしが出来ないっぽいのに
jobjectはできるのだろうか?
一応動いたけど。

後者の場合は
アプリ -> Web -> アプリと切替を行いたいので
プログラムの挿入箇所はOnCreate()とWebページに移動させる関数内の2箇所

OnCreate()
public void onCreate(Bundle savedInstanceState) {
  ...
  // WebViewの初期化
  webView = new WebView(this);
  webView.setWebViewClient(new WebViewClient());

  // アプリViewの初期化
  this.view = new SurfaceView(this);
  //this.view.setRenderer(new GLRenderer());
  this.view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU);
  view.getHolder().addCallback(this);
  setContentView(this.view);
  ...
}
Webページの遷移
public void moveWebView()
{
  // Viewの切替
  setContentView(webView);
  webView.loadUrl("http://www.google.co.jp/");
}
という感じのようです。
要はsetContentView()でViewの切替をする感じですかね。