facebook twitter hatena line email

Android/webview/net表示

提供: 初心者エンジニアの簡易メモ
2020年8月26日 (水) 15:03時点におけるAdmin (トーク | 投稿記録)による版 (net::ERR_CACHE_MISSが起こる場合)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

プロジェクトを作成

サンプルでWebview1で作成してます。

パーミッション追加

  • AndroidManifest.xmlに以下追加
<uses-permission android:name="android.permission.INTERNET" />

以下ファイルを作成

  • src/info/nonip/android/Webview1/Webview1Activity.java
package info.nonip.android.Webview1;
import info.nonip.android.util.BrowsrUtil;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Webview1Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // ウェブビューを開く
        WebviewUtil.execOpenById(this, R.string.webview_url, R.id.webview);
    }
}
  • src/info/nonip/android/util/WebviewUtil.java
package info.nonip.android.util;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Activity;
import android.content.Context;
//必須:<uses-permission android:name="android.permission.INTERNET" />
public class WebviewUtil {
    public static void execOpenById(Activity activity, int res_id, int view_res_id) {
        String url = activity.getResources().getString(res_id);
        execOpenByUrl(activity, url, view_res_id);
    }
    public static void execOpenByUrl(Activity activity, String url, int view_res_id) {
        // webviewロード
        WebView webview = new WebView(activity);
        // 定義したlayoutからwebviewを呼び出す
        webview = (WebView)activity.findViewById(view_res_id);
        // アプリ内にwebviewを設置
        webview.setWebViewClient(new WebViewClient());
        // url指定
        webview.loadUrl(url);
        // JavaScriptを有効に
        webview.getSettings().setJavaScriptEnabled(true);
    }
}
  • res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <WebView
     android:id="@+id/webview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_weight="1"
           />
</LinearLayout>
  • res/values/strings.xml
<string name="webview_url">https://www.google.com</string>

その他

// JavaScriptを有効に
webview.getSettings().setJavaScriptEnabled(true);

参考

http://y-anz-m.blogspot.jp/2010/07/androidwebview.html

net::ERR_CACHE_MISSが起こる場合

AndroidManifest.xmlに以下追加

<uses-permission android:name="android.permission.INTERNET" />

com.google.android.webview not foundが起こる場合

以下メッセージが出る場合

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.example.project1/jp.example.project1.main.MainActivity_}: android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: android.content.pm.PackageManager$NameNotFoundException: Application package 
Caused by android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: android.content.pm.PackageManager$NameNotFoundException: Application package com.google.android.webview not found
  • エラーの原因は、Webviewを使用しようとすると同時に、Google Playを介してWebviewが更新されるときにエラーが発生するっぽい。
  • 対応方法としては、MissingWebViewPackageExceptionをtyr-catch内で、1秒に1回ポーリングして、例外が発生しないことを確認して WebViewを使用すると良いらしいが、これはメモリ食いそうな対応方法だな・・・。

参考