package com.demo.app.utils.browser;
|
|
import android.Manifest;
|
import android.app.Activity;
|
import android.app.Dialog;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.pm.PackageManager;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapFactory;
|
import android.media.MediaScannerConnection;
|
import android.net.Uri;
|
import android.provider.MediaStore;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.WebView;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.demo.app.utils.Constant;
|
import com.demo.app.utils.JumpActivityUtil;
|
import com.demo.lib.common.dialog.DialogUtil;
|
import com.demo.lib.common.util.ui.LoadingDialogUtil;
|
import com.demo.library_ec.AlibcTradeUtil;
|
import com.demo.lib.common.util.Environment;
|
import com.demo.lib.common.util.common.StringUtils;
|
import com.demo.lib.common.util.security.MD5Utils;
|
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.util.Iterator;
|
|
import androidx.core.app.ActivityCompat;
|
import androidx.core.content.ContextCompat;
|
|
public class MyJavaInterface extends BaseJavaInterface {
|
|
Activity mContext;
|
TextView tv_top_bar_middle, tv_top_bar_left2, tv_top_bar_right;
|
ImageView iv_right;
|
WebView webview;
|
private boolean boo = false;
|
private Dialog loadingDialog;
|
|
public MyJavaInterface(Activity activity, WebView webview) {
|
super(activity);
|
mContext = activity;
|
this.webview = webview;
|
boo = true;
|
loadingDialog = LoadingDialogUtil.getLoadingDialog(activity, "");
|
}
|
|
public MyJavaInterface(Activity activity, TextView tv_top_bar_middle
|
, TextView tv_top_bar_left2, TextView tv_top_bar_right
|
, ImageView iv_right, WebView webview) {
|
super(activity);
|
mContext = activity;
|
this.tv_top_bar_middle = tv_top_bar_middle;
|
this.tv_top_bar_left2 = tv_top_bar_left2;
|
this.tv_top_bar_right = tv_top_bar_right;
|
this.iv_right = iv_right;
|
this.webview = webview;
|
loadingDialog = LoadingDialogUtil.getLoadingDialog(activity, "");
|
}
|
|
@JavascriptInterface
|
public void setTitle(final String title) {
|
// tv_top_bar_middle.setText(title);
|
if (!boo)
|
tv_top_bar_middle.post(new Runnable() {
|
@Override
|
public void run() {
|
if (null != title && !StringUtils.isEmpty(title.trim()))
|
tv_top_bar_middle.setText(title);
|
}
|
});
|
}
|
|
|
@JavascriptInterface
|
public void jumpPageWithFinishCurrentPage(String pageClassName, String paramJson) {
|
Intent intent = null;
|
JSONObject param = null;
|
try {
|
if (StringUtils.isEmpty(paramJson)) {
|
param = null;
|
} else {
|
param = new JSONObject(paramJson);
|
}
|
if (StringUtils.isEmpty(pageClassName)) {
|
return;
|
} else {
|
intent = new Intent(mContext, Class.forName(JumpActivityUtil.filterActivityName(pageClassName)));
|
}
|
} catch (JSONException e) {
|
param = null;
|
e.printStackTrace();
|
} catch (ClassNotFoundException e) {
|
e.printStackTrace();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
if (null != param) {
|
@SuppressWarnings("unchecked")
|
Iterator<String> its = param.keys();
|
while (its.hasNext()) {
|
String key = its.next();
|
String value = param.optString(key);
|
intent.putExtra(key, value);
|
}
|
}
|
mContext.startActivity(intent);
|
if (!boo)
|
mContext.finish();
|
}
|
|
@JavascriptInterface
|
public void finishPage() {
|
if (!boo)
|
iv_right.post(new Runnable() {
|
@Override
|
public void run() {
|
mContext.finish();
|
}
|
});
|
}
|
|
/**
|
* 淘宝授权
|
*
|
* @param url
|
*/
|
@JavascriptInterface
|
public void tbAuth(String url) {
|
if (StringUtils.isEmpty(url))
|
return;
|
AlibcTradeUtil.openAuthLink(mContext, url);
|
}
|
|
@JavascriptInterface
|
public void showLoading() {
|
|
mContext.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
DialogUtil.show(loadingDialog);
|
}
|
});
|
|
}
|
|
@JavascriptInterface
|
public void hideLoading() {
|
mContext.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
DialogUtil.dismiss(loadingDialog);
|
}
|
});
|
}
|
|
// 判断权限集合 是否授权 false授权 true未授权
|
public boolean lacksPermissions(String... permissions) {
|
for (String permission : permissions) {
|
if (lacksPermission(permission)) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
// 判断是否缺少权限
|
private boolean lacksPermission(String permission) {
|
//权限未授权
|
return ContextCompat.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_DENIED;
|
}
|
|
@JavascriptInterface
|
public void savePicture(String url) {
|
if (lacksPermissions(Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.WRITE_EXTERNAL_STORAGE)) { //存储权限未开启
|
ActivityCompat.requestPermissions(mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 10023);
|
} else {//存储权限已开
|
String md5 = MD5Utils.getMD532(url);
|
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
|
+ "/" + Constant.DOWNLOAD_DIR_NAME;
|
if (!new File(path).exists()) {
|
new File(path).mkdirs();
|
}
|
|
File file = new File(path + "/" + md5 + ".jpg");
|
if (!file.exists()) {
|
try {
|
File resultFile = saveImageFromPathToSdCard(mContext, url, path, md5 + ".jpg");
|
if (resultFile != null) {
|
mContext.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
MediaStore.Images.Media.insertImage(mContext.getContentResolver(), BitmapFactory.decodeFile(resultFile.getAbsolutePath()), resultFile.getName(), null);
|
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
Uri uri = Uri.fromFile(file);
|
intent.setData(uri);
|
mContext.sendBroadcast(intent);
|
Toast.makeText(mContext, "保存到相册成功", Toast.LENGTH_SHORT).show();
|
}
|
});
|
}
|
} catch (Exception e) {
|
Toast.makeText(mContext, "图片保存失败", Toast.LENGTH_LONG).show();
|
if (file.exists())
|
file.delete();
|
}
|
|
} else {
|
Toast.makeText(mContext, "图片已经保存!", Toast.LENGTH_LONG).show();
|
}
|
}
|
}
|
|
|
//创建本地保存路径
|
public static File createImageFilePath(String path, String imageFileName) throws IOException {
|
File storageDir = new File(path);
|
if (!storageDir.exists()) {
|
storageDir.mkdir();
|
}
|
File image = new File(storageDir, imageFileName);
|
return image;
|
}
|
|
//保存网络图片保存到本地
|
public static final File saveImageFromPathToSdCard(Context context, String image,
|
String path, String imageFileName) {
|
boolean success = false;
|
File file = null;
|
try {
|
file = createImageFilePath(path, imageFileName);
|
Bitmap bitmap = null;
|
URL url = new URL(image);
|
HttpURLConnection conn = null;
|
conn = (HttpURLConnection) url.openConnection();
|
InputStream is = null;
|
is = conn.getInputStream();
|
bitmap = BitmapFactory.decodeStream(is);
|
FileOutputStream outStream;
|
|
outStream = new FileOutputStream(file);
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
|
outStream.flush();
|
outStream.close();
|
success = true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
if (success) {
|
MediaScannerConnection.scanFile(context, new String[]{file.getPath()}, null, null);
|
return file;
|
} else {
|
return null;
|
}
|
}
|
|
}
|