package com.weikou.beibeivideo.ui.mine;
|
|
import android.Manifest;
|
import android.annotation.TargetApi;
|
import android.app.Activity;
|
import android.app.AlertDialog;
|
import android.app.Notification;
|
import android.app.NotificationChannel;
|
import android.app.NotificationManager;
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.graphics.BitmapFactory;
|
import android.graphics.Color;
|
import android.graphics.PixelFormat;
|
import android.net.Uri;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
|
import androidx.annotation.NonNull;
|
import androidx.core.app.NotificationCompat;
|
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.view.ViewGroup;
|
import android.widget.ProgressBar;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.lcjian.library.permission.PermissionHelper;
|
import com.lcjian.library.permission.PermissionInterface;
|
import com.lcjian.library.util.ManifestDataUtil;
|
import com.tencent.smtt.export.external.interfaces.ConsoleMessage;
|
import com.tencent.smtt.export.external.interfaces.SslError;
|
import com.tencent.smtt.export.external.interfaces.SslErrorHandler;
|
import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
|
import com.tencent.smtt.export.external.interfaces.WebResourceResponse;
|
import com.tencent.smtt.sdk.DownloadListener;
|
import com.tencent.smtt.sdk.WebChromeClient;
|
import com.tencent.smtt.sdk.WebSettings;
|
import com.tencent.smtt.sdk.WebView;
|
import com.tencent.smtt.sdk.WebViewClient;
|
import com.weikou.beibeivideo.R;
|
import com.weikou.beibeivideo.ui.BaseActivity;
|
import com.weikou.beibeivideo.ui.media.VideoDetailActivity2;
|
import com.weikou.beibeivideo.util.ConfigUtil;
|
import com.weikou.beibeivideo.util.browser.BWJavaInterface;
|
import com.weikou.beibeivideo.util.downutil.DownFiles;
|
import com.weikou.beibeivideo.util.downutil.DownFiles.IProgress;
|
import com.weikou.beibeivideo.util.downutil.StringUtils;
|
import com.weikou.beibeivideo.util.ui.TopStatusSettings;
|
import com.weikou.beibeivideo.util.x5.X5WebView;
|
|
import java.io.IOException;
|
import java.util.Set;
|
|
public class BrowserActivity extends BaseActivity implements OnClickListener, PermissionInterface {
|
private final static String TAG = "BrowserActivity";
|
|
private TextView tv_top_bar_left;
|
private TextView tv_top_bar_left2;
|
private TextView tv_top_bar_middle;
|
private X5WebView webview;
|
ProgressBar progressBar;
|
private PermissionHelper mPermissionsChecker; // 权限检测器 检测是否有储存卡写入读取权限
|
|
private Set<String> webSpeedUpHost;
|
|
private WebResourceResponse replaceLocalResource(String url) throws IOException {
|
if (url == null)
|
return null;
|
WebResourceResponse response = null;
|
if (webSpeedUpHost == null) {
|
webSpeedUpHost = ConfigUtil.getWebSpeedUpHost(this);
|
}
|
|
|
String host = null;
|
try {
|
Uri uri = Uri.parse(url);
|
host = uri.getHost();
|
} catch (Exception e) {
|
|
}
|
webSpeedUpHost.add("192.168.3.122");
|
if (webSpeedUpHost != null && webSpeedUpHost.contains(host)) {
|
if (url.endsWith("2.1.4/jquery.min.js")) {
|
response = new WebResourceResponse("*", "UTF-8", getAssets().open("js/jquery-2.1.4.min.js"));
|
} else if (url.endsWith("vue-2.6.12.min.js")) {
|
response = new WebResourceResponse("*", "UTF-8", getAssets().open("js/vue-2.6.12.min.js"));
|
}
|
}
|
return response;
|
}
|
|
|
private void initX5WebView() {
|
webview = findViewById(R.id.webview);
|
webview.setDownloadListener(new MyWebViewDownLoadListener());
|
webview.setWebViewClient(new WebViewClient() {
|
@Override
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
Log.i(TAG, url);
|
if (url != null && url.startsWith("weixin://")) {
|
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
startActivity(intent);
|
return true;
|
} else if (url.startsWith("alipays:") || url.startsWith("alipay")) {
|
try {
|
startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
|
} catch (Exception e) {
|
new AlertDialog.Builder(BrowserActivity.this)
|
.setMessage("未检测到支付宝客户端,请安装后重试。")
|
.setPositiveButton("立即安装", new DialogInterface.OnClickListener() {
|
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
Uri alipayUrl = Uri.parse("https://d.alipay.com");
|
startActivity(new Intent("android.intent.action.VIEW", alipayUrl));
|
}
|
}).setNegativeButton("取消", null).show();
|
}
|
return true;
|
} else if (url != null && url.startsWith("buwanprotocol://")) {
|
String murl = url.split("buwanprotocol://")[1];
|
String[] params = murl.split("#");
|
if (params[0].equalsIgnoreCase("playvideo")) {
|
Intent intent = new Intent(BrowserActivity.this, VideoDetailActivity2.class);
|
Bundle bundle = new Bundle();
|
bundle.putString("Id", params[1]);
|
bundle.putString("ResourceId", params[2]);
|
bundle.putString("DetailId", params[3]);
|
bundle.putString("Share", "0");
|
bundle.putString("ThirdType", "0");
|
intent.putExtra("from", "web");
|
intent.putExtras(bundle);
|
startActivity(intent);
|
}
|
return true;
|
} else if (url.startsWith("tenvideo2://") || url.startsWith("iqiyi://")) {
|
try {
|
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
startActivity(intent);
|
} catch (Exception e) {
|
|
}
|
return true;
|
} else if (url != null && (!url.startsWith("http"))) {
|
return true;
|
}
|
return super.shouldOverrideUrlLoading(view, url);
|
}
|
|
@Override
|
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
|
return super.shouldOverrideUrlLoading(webView, webResourceRequest);
|
}
|
|
@Override
|
public void onPageFinished(WebView webView, String s) {
|
super.onPageFinished(webView, s);
|
}
|
|
@Override
|
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
|
sslErrorHandler.proceed();
|
}
|
|
|
@Override
|
public WebResourceResponse shouldInterceptRequest(WebView webView, String url) {
|
WebResourceResponse response = null;
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
response = super.shouldInterceptRequest(webView, url);
|
try {
|
WebResourceResponse newResponse = replaceLocalResource(url);
|
if (newResponse != null)
|
response = newResponse;
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
return response;
|
}
|
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
@Override
|
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
|
WebResourceResponse response = super.shouldInterceptRequest(view, request);
|
String url = String.valueOf(request.getUrl());
|
try {
|
WebResourceResponse newResponse = replaceLocalResource(url);
|
if (newResponse != null)
|
response = newResponse;
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return response;
|
}
|
|
});
|
|
webview.setWebChromeClient(new WebChromeClient() {
|
|
@Override
|
public void onReceivedTitle(WebView view, String title) {
|
tv_top_bar_middle.setText(title);
|
}
|
|
@Override
|
public void onProgressChanged(WebView webView, int i) {
|
if (i == 100) {
|
progressBar.setVisibility(View.GONE);
|
} else {
|
if (View.INVISIBLE == progressBar.getVisibility()) {
|
progressBar.setVisibility(View.VISIBLE);
|
}
|
progressBar.setProgress(i);
|
}
|
super.onProgressChanged(webView, i);
|
}
|
|
@Override
|
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
Log.i(TAG, consoleMessage.message());
|
return super.onConsoleMessage(consoleMessage);
|
}
|
});
|
WebSettings webSetting = webview.getSettings();
|
webSetting.setJavaScriptEnabled(true);
|
webSetting.setTextZoom(100);
|
webview.addJavascriptInterface(new BWJavaInterface(this, webview), "yestv");
|
}
|
|
private boolean needSetResult = false;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
getWindow().setFormat(PixelFormat.TRANSLUCENT);
|
setContentView(R.layout.browser_activity);
|
TopStatusSettings.setStatusViewAndDeepColor(this);
|
tv_top_bar_left = findViewById(R.id.tv_top_bar_left);
|
tv_top_bar_left2 = findViewById(R.id.tv_top_bar_left2);
|
tv_top_bar_left2.setVisibility(View.VISIBLE);
|
tv_top_bar_middle = findViewById(R.id.tv_top_bar_middle);
|
|
tv_top_bar_left2.setText("关闭");
|
tv_top_bar_left.setOnClickListener(this);
|
tv_top_bar_left2.setOnClickListener(this);
|
|
progressBar = findViewById(R.id.myProgressBar);
|
progressBar.setMax(100);
|
progressBar.setProgressDrawable(this.getResources()
|
.getDrawable(R.drawable.color_progressbar));
|
initX5WebView();
|
String url = getIntent().getStringExtra("url");
|
// String url="http://192.168.3.122:8848/buwan-web/BuWanWeb/vip/pay_success.html?id=23";
|
webview.loadUrl(url);
|
needSetResult = getIntent().getBooleanExtra("result", false);
|
mPermissionsChecker = new PermissionHelper(this, this);//权限
|
}
|
|
// 文件下载监听
|
|
private class MyWebViewDownLoadListener implements DownloadListener {
|
|
@Override
|
public void onDownloadStart(String url, String userAgent,
|
String contentDisposition, String mimetype, long contentLength) {
|
startDownLoadFile(url);
|
}
|
}
|
|
private NotificationManager manager;
|
private Notification notif;
|
private Notification.Builder oBuilder;
|
private NotificationCompat.Builder builder;
|
int j = -1;
|
|
String tempUrl = null;
|
|
private void startDownLoadFile(String url) {
|
tempUrl = url;
|
if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限
|
mPermissionsChecker.showNormalDialog();
|
return;
|
}
|
tempUrl = null;
|
|
new DownFiles(this, new IProgress() {
|
|
@Override
|
public void getProgress(int p) {
|
// stub
|
if (p > 99) {
|
handler.sendEmptyMessage(1);
|
Log.i("DownFiles", "getProgress下载进度:" + p);
|
} else {
|
if (manager == null) {
|
Toast.makeText(BrowserActivity.this, "文件已经开始下载",
|
Toast.LENGTH_SHORT).show();
|
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
String id = "YSDQ_DOWNLOAD";
|
String description = ManifestDataUtil.getAppMetaData(BrowserActivity.this, id);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
int importance = NotificationManager.IMPORTANCE_HIGH;
|
NotificationChannel mChannel = new NotificationChannel(id, "影视大全下载", importance);
|
mChannel.setDescription(description);
|
mChannel.enableLights(true);
|
mChannel.setLightColor(Color.RED);
|
//关闭震动
|
mChannel.enableVibration(false);
|
mChannel.setVibrationPattern(new long[]{0});
|
manager.createNotificationChannel(mChannel);
|
oBuilder = new Notification.Builder(BrowserActivity.this, id);
|
oBuilder.setContentTitle("影视大全")
|
.setSmallIcon(R.drawable.ic_launcher)
|
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
|
.setContentText("热门应用下载")
|
.setAutoCancel(true)
|
.build();
|
} else {
|
builder = new NotificationCompat.Builder(BrowserActivity.this);
|
builder.setContentTitle("影视大全")
|
.setContentText("热门应用下载")
|
.setSmallIcon(R.drawable.ic_launcher)
|
.setOngoing(true);//无效
|
}
|
}
|
|
Message msg = handler.obtainMessage();
|
if (j != p) {
|
msg.what = 0;
|
msg.arg1 = p;
|
handler.sendMessage(msg);
|
}
|
j = p;
|
}
|
}
|
}).execute(url);
|
}
|
|
private Handler handler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
super.handleMessage(msg);
|
switch (msg.what) {
|
case 0:
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
oBuilder.setContentText(msg.arg1 + "%");
|
notif = oBuilder.build();
|
} else {
|
builder.setContentText(msg.arg1 + "%");
|
notif = builder.build();
|
}
|
manager.notify(0, notif);
|
break;
|
case 1:
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
oBuilder.setContentText("下载完成");
|
notif = oBuilder.build();
|
} else {
|
builder.setContentText("下载完成");
|
notif = builder.build();
|
}
|
manager.notify(0, notif);
|
j = 100;
|
manager.cancelAll();
|
break;
|
default:
|
break;
|
}
|
}
|
};
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
if (webview != null) {
|
webview.loadUrl("javascript:onResume()");
|
}
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
}
|
|
@Override
|
protected void onDestroy() {
|
if (webview != null) {
|
webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
|
webview.clearHistory();
|
|
((ViewGroup) webview.getParent()).removeView(webview);
|
webview.destroy();
|
webview = null;
|
}
|
super.onDestroy();
|
}
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.tv_top_bar_left: {
|
if (!webview.canGoBack())
|
finishPage();
|
else {
|
webview.goBack();
|
}
|
}
|
break;
|
case R.id.tv_top_bar_left2: {
|
finishPage();
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void finishPage() {
|
if (needSetResult)
|
setResult(Activity.RESULT_OK);
|
finish();
|
}
|
|
// 设置回退
|
// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
|
@Override
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
|
webview.goBack(); // goBack()表示返回WebView的上一页面
|
return true;
|
} else {
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
finishPage();
|
}
|
}
|
return super.onKeyDown(keyCode, event);
|
}
|
|
|
/**
|
* 权限请求码
|
*
|
* @return
|
*/
|
@Override
|
public int getPermissionsRequestCode() {
|
return 1001;
|
}
|
|
/**
|
* 请求权限
|
*
|
* @return
|
*/
|
@Override
|
public String[] getPermissions() {
|
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
}
|
|
/**
|
* 权限请求成功
|
*/
|
@Override
|
public void requestPermissionsSuccess() {
|
if (!StringUtils.isNullOrEmpty(tempUrl)) {
|
startDownLoadFile(tempUrl);
|
}
|
}
|
|
/**
|
* 权限请求失败
|
*/
|
@Override
|
public void requestPermissionsFail() {
|
// Toast.makeText(this, "你以拒绝权限", Toast.LENGTH_SHORT).show();
|
}
|
|
/**
|
* 请求权限结果
|
*
|
* @param requestCode
|
* @param permissions
|
* @param grantResults
|
*/
|
@Override
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
if (mPermissionsChecker.requestPermissionsResult(requestCode, permissions, grantResults)) {
|
//权限请求结果,并已经处理了该回调
|
return;
|
}
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
}
|
}
|