「Android/webview/net表示」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→以下ファイルを作成) |
(→net::ERR_CACHE_MISSが起こる場合) |
||
(同じ利用者による、間の7版が非表示) | |||
行64: | 行64: | ||
</LinearLayout> | </LinearLayout> | ||
− | *res/values/ | + | *res/values/strings.xml |
− | <<nowiki />string name="webview_url"> | + | <<nowiki />string name="webview_url">https://www.google.com</string> |
==その他== | ==その他== | ||
// JavaScriptを有効に | // JavaScriptを有効に | ||
webview.getSettings().setJavaScriptEnabled(true); | webview.getSettings().setJavaScriptEnabled(true); | ||
+ | |||
==参考== | ==参考== | ||
http://y-anz-m.blogspot.jp/2010/07/androidwebview.html | 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が起こる場合== | ||
+ | 以下メッセージが出る場合 | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | * エラーの原因は、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) |
2020年8月26日 (水) 15:03時点における最新版
目次
プロジェクトを作成
サンプルで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を使用すると良いらしいが、これはメモリ食いそうな対応方法だな・・・。