Android/webview/net表示
提供: 初心者エンジニアの簡易メモ
目次
プロジェクトを作成
サンプルで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);
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を使用すると良いらしいが、これはメモリ食いそうな対応方法だな・・・。
参考
- https://stackoverflow.com/questions/46278681/android-webkit-webviewfactorymissingwebviewpackageexception-from-android-7-0/47044644
- https://bugs.chromium.org/p/chromium/issues/detail?id=506369
- https://stackoverflow.com/questions/29575313/namenotfoundexception-webview (edited)