package org.xing.android; import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.pm.ActivityInfo; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.webkit.WebChromeClient; import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.umeng.analytics.MobclickAgent; import java.io.ByteArrayInputStream; public class SimpleHelpActivity extends AppCompatActivity { private WebView helpWeb; private View videoView; private FrameLayout videoContainerView; LinearLayout toolBar; private ProgressBar progressBar; private TextView titleText; private WebChromeClient chromeClient; /** * 设置全屏 */ private void setFullScreen() { // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 全屏下的状态码:1098974464 // 窗口下的状态吗:1098973440 } /** * 退出全屏 */ private void quitFullScreen() { // 声明当前屏幕状态的参数并获取 final WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attrs); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple_help); videoView = null; videoContainerView = (FrameLayout) findViewById(R.id.video); toolBar = (LinearLayout) findViewById(R.id.toolBar); progressBar = (ProgressBar) findViewById(R.id.webProgress); titleText = (TextView) findViewById(R.id.help_title); Button closeButton = (Button) findViewById(R.id.help_close); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); helpWeb = (WebView) this.findViewById(R.id.simple_help); helpWeb.setBackgroundColor(0); WebSettings settings = helpWeb.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setDatabaseEnabled(true); settings.setAppCacheEnabled(true); settings.setCacheMode(WebSettings.LOAD_DEFAULT); settings.setPluginState(WebSettings.PluginState.ON); settings.setAllowFileAccess(true); settings.setLoadWithOverviewMode(false); settings.setDomStorageEnabled(true); chromeClient = new WebChromeClient() { private CustomViewCallback callBack; // 播放网络视频时全屏会被调用的方法 @Override public void onShowCustomView(View view, CustomViewCallback callback) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); toolBar.setVisibility(View.INVISIBLE); helpWeb.setVisibility(View.INVISIBLE); // 如果一个视图已经存在,那么立刻终止并新建一个 if (videoView != null) { callback.onCustomViewHidden(); return; } videoContainerView.addView(view); videoView = view; callBack = callback; videoContainerView.setVisibility(View.VISIBLE); setFullScreen(); } // 视频播放退出全屏会被调用的 @Override public void onHideCustomView() { if (videoView == null)// 不是全屏播放状态 return; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); videoView.setVisibility(View.GONE); videoContainerView.removeView(videoView); videoView = null; videoContainerView.setVisibility(View.GONE); callBack.onCustomViewHidden(); toolBar.setVisibility(View.VISIBLE); helpWeb.setVisibility(View.VISIBLE); quitFullScreen(); } @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { progressBar.setVisibility(View.GONE); } else { if (View.INVISIBLE == progressBar.getVisibility()) { progressBar.setVisibility(View.VISIBLE); titleText.setText("页面加载中..."); } progressBar.setProgress(newProgress); } super.onProgressChanged(view, newProgress); } }; helpWeb.setWebChromeClient(chromeClient); helpWeb.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { WebView.HitTestResult hitTestResult = view.getHitTestResult(); if (!TextUtils.isEmpty(url) && hitTestResult == null) { return; } titleText.setText(view.getTitle()); } public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url.startsWith("http") || url.startsWith("https") || url.startsWith("javascript") || url.startsWith("file")) { return super.shouldInterceptRequest(view, url); } else { String tips = "启动外部应用..."; try { Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(in); } catch (ActivityNotFoundException ex) { tips = "启动外部应用失败,请安装最新版应用。"; } return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream(tips.getBytes())); } } }); helpWeb.setOnTouchListener(new View.OnTouchListener() { private float x1 = 0; private float x2 = 0; private float y1 = 0; private float y2 = 0; @Override public boolean onTouch(View v, MotionEvent event) { //继承了Activity的onTouchEvent方法,直接监听点击事件 if (event.getAction() == MotionEvent.ACTION_DOWN) { //当手指按下的时候 x1 = event.getX(); y1 = event.getY(); } if (event.getAction() == MotionEvent.ACTION_UP) { //当手指离开的时候 x2 = event.getX(); y2 = event.getY(); if (y1 - y2 > 50) { toolBar.setVisibility(View.GONE); } else if (y2 - y1 > 50) { toolBar.setVisibility(View.VISIBLE); } } return false; } }); String url = getIntent().getStringExtra("url"); helpWeb.loadUrl(url); } @Override public void onResume() { super.onResume(); MobclickAgent.onResume(this); helpWeb.onResume(); } @Override public void onPause() { super.onPause(); MobclickAgent.onPause(this); helpWeb.onPause(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && helpWeb.canGoBack()) { helpWeb.goBack();// 返回前一个页面 return true; } return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { if (videoView == null) { super.onBackPressed(); } else { chromeClient.onHideCustomView(); } } }