gpt4 book ai didi

java - Webview 在 Ice Cream Sandwich 中显示白色空白页面

转载 作者:太空狗 更新时间:2023-10-29 12:50:21 25 4
gpt4 key购买 nike

在我的 WebView 中,我加载了一个 URL,该 URL 具有电视 channel 直播的嵌入式视频播放器。它在除 ICS(4) 之外的所有 Android 操作系统版本中都可以正常工作。第一次播放视频效果很好,但是当我返回并再次进入包含视频的页面时,视频不会加载并显示空白页面。如果我从应用程序设置中强制停止该应用程序并再次启动该应用程序然后它运行良好然后像往常一样再次出现白屏,我已经实现了很多策略,这是最新的,我完全被困在这里:

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();
}
}

谁能帮帮我?

最佳答案

经过很长时间的研究,我自己想通了,当我在 onPause() 中写的时候

webtv.destroy();

代替

webtv.onPause();

解决问题:)

关于java - Webview 在 Ice Cream Sandwich 中显示白色空白页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com