我确实尝试过使用Google代码和其他资源的示例,演示WebView
,但是当我尝试在我自己的代码中执行此操作时,它对我不起作用.
我想加载myfile.html
我放在assets文件夹中,并使用:
private WebView myWebView;
myWebView.loadUrl("file:///android_assets/myfile.html");
Run Code Online (Sandbox Code Playgroud)
在模拟器上显示错误
file:///android_assets/myfile.html
无法加载网页:找不到请求的文件./android_assets/myfile.html
当我把该文件放到文件res/raw/
夹并使用:
myWebView.loadUrl("file:///android_res/raw/myfile.html");
Run Code Online (Sandbox Code Playgroud)
然后只有模拟器android 2.2 API级别8可能加载文件,其他旧版本显示相同的错误.我错过了什么吗?
有没有办法在适用于所有API版本的应用程序包中加载现有的.html文件?
我正在尝试在Android WebView中使用类似Facebook的功能(项目规范不允许浏览器打开,或任何不在应用程序活动中).
因此,限制是它必须在WebView中完成.我已经设法使它成为一个对话框,并且用户点击按钮,它(WebView)成功(在同一视图中)重定向到facebooks登录页面.身份验证成功后,WebView
(在对话框中)将重定向到带有标题的空白页面.
有趣的是,当用户离开空白对话框并再次单击类似按钮时,它的工作方式非常完美(喜欢和不同) - 它以某种方式保持身份验证活动.要解决空白页面,我尝试过/使用过以下内容:
WebViewClient
和shouldOverloadUrlForwarding
保持整个过程在同一个WebView
对话框中.WebChromeClient
正确执行JavaScript -登录后没有它不可能喜欢/不象.setUserAgentString()
模拟其他浏览器,如Chrome或Firefox尝试了SSL错误证书处理(API级别8)(at WebViewClient
)
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
使用(以及所有可能的组合)
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
试图坚持使用饼干CookieSyncManager
,CookieManager
并手动处理.
所有这一切都没有结果.我非常感谢任何帮助!
如何获取片段来保存它的状态?我已经尝试了一切,但没有运气,没有任何工作.
我试过添加:
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebView.saveState(outState);
Log.w("///////", "onSaveInstanceState");
}
Run Code Online (Sandbox Code Playgroud)
但这永远不会被称为.
有任何想法吗?
我现在正在尝试恢复Web视图的状态:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mainView = (View) inflater.inflate(R.layout.frag_b, container, false);
myWebView = (WebView) mainView.findViewById(R.id.webviewtest);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.getSettings().setPluginsEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(false);
myWebView.getSettings().setSupportZoom(false);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.loadUrl("http://www.google.com");
myWebView.setId(1);
myWebView.restoreState(savedInstanceState);
Log.w("///////", "onCreateView");
return mainView;
}
Run Code Online (Sandbox Code Playgroud)
但上述不起作用,任何想法?
我有一个简单的webView应用程序,它从我们的网站加载一个页面,其中包含我们的现场人员应该每天访问的位置和电话号码.它提供了启动导航或拨打电话的钩子.从外部活动返回时,应用程序崩溃.点击手机的主页按钮,然后拨打手机,然后返回应用程序工作正常.
这是代码......
更新2 - 不再崩溃,返回时webview为空白
public class VSIMobile_WebView extends Activity {
private static String PROVIDER="gps";
private WebView browser;
private LocationManager myLocationManager=null;
private TelephonyManager myTeleManager = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
browser=(WebView)findViewById(R.id.webview);
myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
myTeleManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new Locater(), "locater");
browser.addJavascriptInterface(new JavaScriptInterface(this), "Android");
if (savedInstanceState!=null){
browser.restoreState(savedInstanceState);
}else{
browser.loadUrl("http://zzz.com");
browser.setWebViewClient(new HelloWebViewClient());
}
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onSaveInstanceState(Bundle outState) {
//Toast.makeText(getBaseContext(), browser.getUrl(), Toast.LENGTH_LONG).show();
browser.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
browser.restoreState(state); …
Run Code Online (Sandbox Code Playgroud) 我知道这已被问过太多次,而且SO充满了类似的问题.我经历了大部分时间,我已经研究了这个问题几天了,我还没有找到明确的解决方案.
我可以轻松避免添加configChanges="orientation|screenSize"
到包含WebView的活动中的所有麻烦; 我已经测试了这个并且按预期工作(WebView没有重新加载).但我真的想避免这个解决方案.
这是我当前的WebView实现:
public class BrowserFragment extends Fragment {
private WebView mWebView;
public BrowserFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mWebView == null) {
mWebView = new WebView(getActivity());
}
return mWebView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
}); …
Run Code Online (Sandbox Code Playgroud) 当我使用备份和还原Webview状态时,我收到此消息:x地址处的网页可能暂时关闭或可能已永久移至新的网址。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
webViewShowPoll.saveState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
webViewShowPoll.restoreState(outState);
}
Run Code Online (Sandbox Code Playgroud)
和Androidmanifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<activity
android:name="com.omid.epoll.mobile.Poll"
android:launchMode="singleInstance"
android:label="@string/title_activity_poll"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
</activity>
Run Code Online (Sandbox Code Playgroud) 我正在使用 webview.loadUrl() 将视频 url 加载到 webview 中。播放器是在 html 本身中编码的,因此我只需将 url 加载到 Web 视图中即可。
如果我不在清单中给出 android:configChanges="orientation" ,一切正常。网络视图在方向改变时正确调整大小,并且视频被调整以正确适应屏幕,当然然后视频会重新启动。
因此,我在清单中给出了 android:configChanges="orientation" ,以便视频不会重新加载。现在,虽然视频不会重新加载并继续播放,但视频/网络视图无法正确调整大小,并且如果设备最初为纵向,然后更改为横向,则一半视频会离开屏幕。如果设备最初处于横向模式,然后更改为纵向模式,则仅使用一半的屏幕。
如果您能找到方法或有任何建议,请回复。
我读了文章 Android WebView:处理方向更改
并按照提示建立一个MainActivity项目
package com.example.testvideo1;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebView;
import android.os.Build;
@SuppressLint("NewApi")
public class MainActivity extends ActionBarActivity {
private VideoEnabledWebView webView;
private VideoEnabledWebChromeClient webChromeClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set layout
setContentView(R.layout.activity_main);
// Save the web view
webView = (VideoEnabledWebView) findViewById(R.id.webView);
// Initialize the VideoEnabledWebChromeClient and set event handlers
View nonVideoLayout = findViewById(R.id.nonVideoLayout);
// Your own …
Run Code Online (Sandbox Code Playgroud) 您好,我面临 Android Webview 方向问题,当更改方向时,应用程序重新启动并从头开始显示页面。我正在阅读不同的答案,但没有解决方案对我有用,这就是为什么我在这里给出我的代码。请任何 Android 开发人员帮助我并告诉我在哪里编辑代码或添加一些东西
package com.example.edarabia;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity{
WebView mywebview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isNetworkConnected() == true){
setContentView(R.layout.activity_main);
mywebview = (WebView) findViewById(R.id.webview);
mywebview.getSettings().setJavaScriptEnabled(true);
mywebview.setWebViewClient(new myWebClient());
mywebview.loadUrl("http://www.grafdom.com/operations/projects/ma/edarabiaapp/");
mywebview.getSettings().setBuiltInZoomControls(true);
mywebview.getSettings().setLoadWithOverviewMode(false);
mywebview.getSettings().setUseWideViewPort(false);
}else{
setContentView(R.layout.splash);
showBuyDialog();
}
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if …
Run Code Online (Sandbox Code Playgroud) 我想在我的Android应用程序中打开本地html文件.
该文件位于我的资产文件夹下.所以我正在设置一个WebViewClient并将我的页面加载到其中.但我得到一个"网页不可用"错误.
这是我的活动代码:
public class LocalDialogActivity extends Activity {
protected WebView webView;
private static final String ENROLLMENT_URL = "file:///assets/enrollment.html";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_dialog);
webView = (WebView)findViewById(R.id.local_dialog_webview);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
refreshWebView(webView);
}
public void refreshWebView(View view) {
webView.loadUrl(ENROLLMENT_URL);
}
Run Code Online (Sandbox Code Playgroud)
和布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView
android:id="@+id/local_dialog_webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我的AndroidMainfest.xml文件中有互联网权限,可以访问互联网:
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助.谢谢.
我在阻止WebView在retainInstance设置为true的片段内时重新加载时遇到问题.
我试过的路线:
SaveInstanceState(由于retainInstance,不会在旋转时传递包)一个自定义包,保存在onSaveInstanceState上并在create中保存保留WebView引用并尝试将其添加回视图层次结构
必须有一个更简单的方法吗?
android ×10
webview ×8
orientation ×2
assets ×1
facebook ×1
fragment ×1
fullscreen ×1
html5 ×1
landscape ×1
page-refresh ×1
video ×1