PdfsActivity.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package com.uas.standard_esop.activity;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.graphics.Color;
  5. import android.os.Build;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.view.Window;
  13. import android.view.WindowManager;
  14. import android.webkit.WebSettings;
  15. import android.webkit.WebView;
  16. import android.widget.ImageView;
  17. import android.widget.LinearLayout;
  18. import androidx.appcompat.app.AppCompatActivity;
  19. import com.uas.standard_esop.R;
  20. import com.uas.standard_esop.util.CommonUtil;
  21. import com.uas.standard_esop.util.DateFormatUtil;
  22. import java.io.File;
  23. import java.io.FileOutputStream;
  24. import java.io.IOException;
  25. import java.io.InputStream;
  26. import java.lang.reflect.Field;
  27. import java.lang.reflect.Method;
  28. import java.net.URL;
  29. import java.net.URLConnection;
  30. import java.util.ArrayList;
  31. import static com.uas.standard_esop.util.OSUtil.isMIUI;
  32. import static razerdp.util.RomUtil.isFlyme;
  33. public class PdfsActivity extends AppCompatActivity {
  34. private Window window;
  35. private boolean useThemeStatusBarColor = false;//是否使用特殊的标题栏背景颜色,android5.0以上可以设置状态栏背景色,如果不使用则使用透明色值
  36. private boolean useStatusBarColor = true;//是否使用状态栏文字和图标为暗色,如果状态栏采用了白色系,则需要使状态栏和图标为暗色,android6.0以上可以设置
  37. private int option;
  38. private boolean fullscreen=false;
  39. private Context context;
  40. private String destDirPath;
  41. private String filename;
  42. private String filepath;
  43. @Override
  44. protected void onCreate(Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.activity_pdfs);
  47. window = getWindow();
  48. context=this;
  49. Intent intent = getIntent();
  50. ArrayList<String> lists = intent.getStringArrayListExtra("lists");
  51. filename = intent.getStringExtra("filename");
  52. for (int i=0;i<lists.size();i++){
  53. filepath = lists.get(i);
  54. Log.e("smd5", filepath);
  55. }
  56. WebView webView = findViewById(R.id.webView);
  57. ImageView iv_fullscreen = findViewById(R.id.iv_fullscreen);
  58. ImageView iv_download = findViewById(R.id.iv_download);
  59. LinearLayout iv_goback = findViewById(R.id.iv_goback);
  60. ImageView iv_back = findViewById(R.id.iv_back);
  61. iv_back.setColorFilter(this.getResources().getColor(R.color.zise));
  62. iv_fullscreen.setColorFilter(this.getResources().getColor(R.color.zise));
  63. iv_download.setColorFilter(this.getResources().getColor(R.color.zise));
  64. WebSettings webSettings = webView.getSettings();
  65. webSettings.setJavaScriptEnabled(true);
  66. webSettings.setPluginState(WebSettings.PluginState.ON);
  67. webSettings.setAllowContentAccess(true);
  68. webSettings.setAllowFileAccess(true);
  69. webSettings.setAllowFileAccessFromFileURLs(true);
  70. webSettings.setAllowUniversalAccessFromFileURLs(true);
  71. webView.loadUrl("file:///android_asset/web/viewer.html?file="+filepath);
  72. webView.getSettings().setBuiltInZoomControls(true);
  73. webView.getSettings().setSupportZoom(true);
  74. webView.getSettings().setDisplayZoomControls(false);//不显示缩放按钮
  75. iv_goback.setOnClickListener(new View.OnClickListener() {
  76. @Override
  77. public void onClick(View v) {
  78. finish();
  79. }
  80. });
  81. iv_fullscreen.setOnClickListener(new View.OnClickListener() {
  82. @Override
  83. public void onClick(View v) {//全屏
  84. if (fullscreen==false){
  85. fullscreen=true;
  86. getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  87. iv_fullscreen.setImageResource(R.drawable.not_fullscreen);
  88. }else {
  89. fullscreen=false;
  90. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  91. iv_fullscreen.setImageResource(R.drawable.fullscreen);
  92. }
  93. }
  94. });
  95. destDirPath = Environment.getExternalStorageDirectory().getPath() + "//UasEsop//";
  96. iv_download.setOnClickListener(new View.OnClickListener() {
  97. @Override
  98. public void onClick(View v) {
  99. new Thread(new Runnable() {
  100. @Override
  101. public void run() {
  102. boolean pathExist = isPathExist(destDirPath);
  103. if (pathExist==true){
  104. downloadFile1(filepath, destDirPath);
  105. }else {
  106. try {
  107. CreateText(filepath, destDirPath);
  108. } catch (IOException e) {
  109. e.printStackTrace();
  110. }
  111. }
  112. }
  113. }).start();
  114. }
  115. });
  116. }
  117. /**
  118. * 判断路径是否存在
  119. *
  120. * @param path 需要判断的路径
  121. * @return true 是存在,false 是不存在
  122. */
  123. public boolean isPathExist(String path) {
  124. File file = new File(path);
  125. if (file.exists()) {
  126. return true;
  127. }
  128. return false;
  129. }
  130. //创建文件夹及文件
  131. public void CreateText(String filepath,String destDirPath) throws IOException {
  132. File file = new File(destDirPath);
  133. if (!file.exists()) {
  134. try {
  135. //按照指定的路径创建文件夹
  136. file.mkdirs();
  137. downloadFile1(filepath,destDirPath);
  138. } catch (Exception e) {
  139. // TODO: handle exception
  140. }
  141. }
  142. }
  143. public void downloadFile1(String urlPath,String path) {
  144. try{
  145. final long startTime = System.currentTimeMillis();
  146. Log.i("DOWNLOAD","startTime="+startTime);
  147. //下载函数
  148. String filenametime= DateFormatUtil.getProofTime();
  149. //获取文件名
  150. URL myURL = new URL(urlPath);
  151. URLConnection conn = myURL.openConnection();
  152. conn.connect();
  153. InputStream is = conn.getInputStream();
  154. int fileSize = conn.getContentLength();//根据响应获取文件大小
  155. if (fileSize <= 0) throw new RuntimeException("无法获知文件大小 ");
  156. if (is == null) throw new RuntimeException("stream is null");
  157. File file1 = new File(path);
  158. if(!file1.exists()){
  159. file1.mkdirs();
  160. }
  161. //把数据存入路径+文件名
  162. FileOutputStream fos = new FileOutputStream(path+"/"+filenametime+filename);
  163. byte buf[] = new byte[1024];
  164. int downLoadFileSize = 0;
  165. do{
  166. //循环读取
  167. int numread = is.read(buf);
  168. if (numread == -1)
  169. {
  170. break;
  171. }
  172. fos.write(buf, 0, numread);
  173. downLoadFileSize += numread;
  174. //更新进度条
  175. } while (true);
  176. Log.i("DOWNLOAD","download success");
  177. Log.i("DOWNLOAD","totalTime="+ (System.currentTimeMillis() - startTime));
  178. Log.i("DOWNLOAD","文件保存到:"+path);
  179. handler.sendEmptyMessage(0);
  180. is.close();
  181. // SPUtils.putString(getContext(),"stades","1");
  182. } catch (Exception ex) {
  183. Log.e("DOWNLOAD", "error: " + ex.getMessage(), ex);
  184. // SPUtils.putString(getContext(),"stades","2");
  185. }
  186. }
  187. private Handler handler = new Handler() {
  188. @Override
  189. public void handleMessage(Message msg) {
  190. // TODO Auto-generated method stub
  191. CommonUtil.toastNoRepeat(context,"文件保存到"+destDirPath);
  192. }
  193. };
  194. protected void setStatusBar() {
  195. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
  196. View decorView = window.getDecorView();
  197. option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
  198. decorView.setSystemUiVisibility(option);
  199. //根据上面设置是否对状态栏单独设置颜色
  200. if (useThemeStatusBarColor) {
  201. window.setStatusBarColor(getResources().getColor(R.color.colorMain));
  202. } else {
  203. window.setStatusBarColor(Color.TRANSPARENT);
  204. }
  205. } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
  206. WindowManager.LayoutParams localLayoutParams = window.getAttributes();
  207. localLayoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags;
  208. }
  209. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && useStatusBarColor) {//android6.0以后可以对状态栏文字颜色和图标进行修改
  210. window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  211. }
  212. setStatusTextColor(true);
  213. }
  214. /**
  215. * 设置状态栏文字色值为深色调
  216. * @param useDart 是否使用深色调
  217. */
  218. private void setStatusTextColor(Boolean useDart) {
  219. if (useDart) {
  220. if (isFlyme()){
  221. processFlyMe(useDart);
  222. }else if (isMIUI()){
  223. processMIUI(useDart);
  224. }else {
  225. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
  226. getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  227. }else {
  228. getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);//实现状态栏图标和文字颜色为暗色
  229. }
  230. }
  231. }
  232. }
  233. private void processFlyMe(Boolean isLightStatusBar) {
  234. WindowManager.LayoutParams lp = window.getAttributes();
  235. try {
  236. // Class instance = getClass().forName("android.view.WindowManager\$LayoutParams");
  237. Class instance = Class.forName("android.view.WindowManager$LayoutParams");
  238. int value = instance.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON").getInt(lp);
  239. Field field = instance.getDeclaredField("meizuFlags");
  240. field.setAccessible(true);
  241. int origin = field.getInt(lp);
  242. if (isLightStatusBar) {
  243. field.set(lp, (origin | value));
  244. } else {
  245. field.set(lp, value & origin);
  246. }
  247. } catch (Exception e) {
  248. e.printStackTrace();
  249. }
  250. }
  251. /**
  252. * 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上 lightStatusBar为真时表示黑色字体
  253. */
  254. private void processMIUI(Boolean lightStatusBar) {
  255. Class clazz = window.getClass();
  256. try {
  257. int darkModeFlag;
  258. // val layoutParams = Class.forName("android.view.MiuiWindowManager\$LayoutParams")
  259. Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
  260. Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
  261. darkModeFlag = field.getInt(layoutParams);
  262. // val extraFlagField = clazz.getMethod("setExtraFlags", Int::class.javaPrimitiveType, Int::class.javaPrimitiveType)
  263. // extraFlagField.invoke(window, if (lightStatusBar) darkModeFlag else 0, darkModeFlag)
  264. Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
  265. extraFlagField.invoke(window,lightStatusBar?darkModeFlag :0,darkModeFlag);
  266. } catch (Exception ignored) {
  267. ignored.printStackTrace();
  268. }
  269. }
  270. }