Java 网络视图显示冰淇淋Sandwitch中的白色空白页
在我的webview中,我加载了一个URL,其中嵌入了一个电视频道直播流的视频播放器。除了ICS(4),它在所有Android操作系统版本中都能正常工作。第一次它播放的视频很好,但是当我回到包含视频的页面时,视频没有加载,显示一个空白的白色页面。如果我从应用程序设置中强制停止应用程序并再次启动应用程序,那么它运行良好,然后像往常一样再次出现白色屏幕,我实施了很多策略,这是最新的,我完全被困在这里:Java 网络视图显示冰淇淋Sandwitch中的白色空白页,java,android,webview,android-4.0-ice-cream-sandwich,Java,Android,Webview,Android 4.0 Ice Cream Sandwich,在我的webview中,我加载了一个URL,其中嵌入了一个电视频道直播流的视频播放器。除了ICS(4),它在所有Android操作系统版本中都能正常工作。第一次它播放的视频很好,但是当我回到包含视频的页面时,视频没有加载,显示一个空白的白色页面。如果我从应用程序设置中强制停止应用程序并再次启动应用程序,那么它运行良好,然后像往常一样再次出现白色屏幕,我实施了很多策略,这是最新的,我完全被困在这里: public class Livetvwebview extends Activity {
public class Livetvwebview extends Activity {
RelativeLayout a;
WebView webtv;
String url;
VideoView video;
WChromeClient chromeClient;
WebViewClient wvClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.livewebview);
Toast.makeText(getApplicationContext(),
"Channel is loading..This may take upto a minute",
Toast.LENGTH_LONG).show();
url = getIntent().getStringExtra("tvchannel");
Log.i("TVURL", url);
webtv = (WebView) findViewById(R.id.webViewlive);
webtv.clearCache(true);
webtv.loadUrl(url);
webtv.getSettings().setLoadWithOverviewMode(true);
webtv.getSettings().setUseWideViewPort(true);
webtv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webtv.setWebChromeClient(new WChromeClient());
webtv.setWebViewClient(new myWebClient());
webtv.getSettings().setJavaScriptEnabled(true);
webtv.getSettings().setPluginState(PluginState.ON);
webtv.getSettings().setDomStorageEnabled(true);
}
public class myWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
}
@SuppressLint("NewApi")
@Override
protected void onPause() {
// TODO Auto-generated method stub
WebSettings webSettings = webtv.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webtv.onPause();
this.finish();
super.onPause();
}
@SuppressLint("NewApi")
@Override
protected void onResume() {
webtv.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// android.os.Process.killProcess(android.os.Process.myPid());
Editor editor = getSharedPreferences("clear_cache",
Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
trimCache(this);
super.onDestroy();
}
class WChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int progress) {
Log.i("Method", "Onrogresschanged");
Livetvwebview.this.setTitle("Loading...");
Livetvwebview.this.setProgress(progress * 100);
if (progress == 100)
Livetvwebview.this.setTitle("LiveTv");
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// TODO Auto-generated method stub
super.onShowCustomView(view, callback);
if (view instanceof FrameLayout) {
FrameLayout frame = (FrameLayout) view;
if (frame.getFocusedChild() instanceof VideoView) {
webtv.setVisibility(View.GONE);
video = (VideoView) frame.getFocusedChild();
FrameLayout.LayoutParams par = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
par.gravity = Gravity.CENTER_HORIZONTAL;
video.setLayoutParams(par);
frame.removeView(video);
a.addView(video);
video.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(Livetvwebview.this,
"Video completed", Toast.LENGTH_LONG)
.show();
}
});
video.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what,
int extra) {
Toast.makeText(Livetvwebview.this,
"Encountered some error", Toast.LENGTH_LONG)
.show();
return true;
}
});
video.start();
}
}
}
}
public static void trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
}
公共类Livetvwebview扩展活动{
相对论a;
网络电视;
字符串url;
视频浏览视频;
WChromeClient-chromecoclient;
WebViewClient wvClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
//requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
getWindow().requestFeature(Window.FEATURE\u进度);
setContentView(R.layout.livewebview);
Toast.makeText(getApplicationContext(),
“频道正在加载..这可能需要一分钟”,
Toast.LENGTH_LONG).show();
url=getIntent().getStringExtra(“tvchannel”);
Log.i(“TVURL”,url);
webtv=(WebView)findViewById(R.id.webViewlive);
webtv.clearCache(true);
webtv.loadUrl(url);
webtv.getSettings().setLoadWithOverview模式(true);
webtv.getSettings().setUseWideViewPort(true);
webtv.setScrollBarStyle(WebView.SCROLLBARS\u外部\u覆盖);
setWebChromeClient(新的WChromeClient());
setWebViewClient(新的myWebClient());
webtv.getSettings().setJavaScriptEnabled(true);
webtv.getSettings().setPluginState(PluginState.ON);
webtv.getSettings().setDomStorageEnabled(true);
}
公共类myWebClient扩展了WebViewClient{
@凌驾
public void onPageStarted(WebView视图、字符串url、位图favicon){
//TODO自动生成的方法存根
super.onPageStarted(视图、url、favicon);
}
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
//TODO自动生成的方法存根
view.loadUrl(url);
返回true;
}
@凌驾
公共void onPageFinished(WebView视图,字符串url){
//TODO自动生成的方法存根
super.onPageFinished(视图、url);
}
}
@SuppressLint(“新API”)
@凌驾
受保护的void onPause(){
//TODO自动生成的方法存根
WebSettings WebSettings=webtv.getSettings();
设置缓存模式(webSettings.LOAD\u NO\u缓存);
webtv.onPause();
这个;
super.onPause();
}
@SuppressLint(“新API”)
@凌驾
受保护的void onResume(){
onResume();
super.onResume();
}
@凌驾
受保护的空onDestroy(){
//TODO自动生成的方法存根
//android.os.Process.killProcess(android.os.Process.myPid());
Editor Editor=getSharedReferences(“清除缓存”,
Context.MODE_PRIVATE).edit();
编辑器.clear();
commit();
trimCache(这个);
super.ondestory();
}
类WChromeClient扩展了WebChromeClient{
@凌驾
public void onProgressChanged(WebView视图,int-progress){
Log.i(“方法”、“Onrogresschanged”);
Livetvwebview.this.setTitle(“加载…”);
Livetvwebview.this.setProgress(progress*100);
如果(进度==100)
Livetvwebview.this.setTitle(“LiveTv”);
}
@凌驾
ShowCustomView(视图视图、CustomViewCallback回调)上的公共无效{
//TODO自动生成的方法存根
super.onShowCustomView(查看、回调);
if(查看FrameLayout的实例){
FrameLayout frame=(FrameLayout)视图;
if(视频视图的frame.getFocusedChild()实例){
webtv.setVisibility(View.GONE);
视频=(视频视图)frame.getFocusedChild();
FrAMelayay.LayOutPARAMS PAR=新FrAMELayOUT LayoutParams
LayoutParams.MATCH_父级,
LayoutParams.MATCH_PARENT);
重力=重力;中心;水平;
视频.设置布局参数(par);
frame.removeView(视频);
a、 addView(视频);
video.setOnCompletionListener(新的OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
Toast.makeText(Livetvwebview.this,
“视频完成”,吐司长度(长)
.show();
}
});
video.setOneRorListener(新的OneRorListener(){
@凌驾
公共布尔onError(MediaPlayer mp,int what,
整数(额外){
Toast.makeText(Livetvwebview.this,
“遇到一些错误”,Toast.LENGTH\u LONG)
.show();
返回true;
}
});
video.start();
}
}
}
}
公共静态缓存(上下文){
试一试{
File dir=context.getCacheDir();
if(dir!=null&&dir.isDirectory()){
webtv.destroy();
webtv.onPause();