Browse Source

二维码扫描本地下载

RaoMeng 9 years ago
parent
commit
cfaf933285

+ 24 - 10
WeiChat/src/main/java/com/xzjmyk/pm/activity/CaptureResultActivity.java

@@ -4,8 +4,9 @@
 package com.xzjmyk.pm.activity;
 
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -16,10 +17,12 @@ import android.webkit.WebViewClient;
 
 import com.uuzuche.lib_zxing.activity.CodeUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.util.DownloadUtil;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 import com.xzjmyk.pm.activity.view.crouton.LifecycleCallback;
 
 
+
 /**
  * @author RaoMeng
  */
@@ -28,7 +31,6 @@ public class CaptureResultActivity extends Activity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_capture_result);
         initActivity();
@@ -46,27 +48,38 @@ public class CaptureResultActivity extends Activity {
         webSettings.setLoadWithOverviewMode(true);
 
         webSettings.setDomStorageEnabled(true);
-        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
         mWebView.setWebViewClient(new WebViewClient() {
             @Override
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
-                /*view.loadUrl(url);
-                return true;*/
+//                view.loadUrl(url);
+//                return true;
                 return false;
             }
+
         });
 
         mWebView.setDownloadListener(new DownloadListener() {
             @Override
-            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
-                Uri uri = Uri.parse(url);
-                Intent intent = new Intent(Intent.ACTION_VIEW,uri);
-                startActivity(intent);
-//                finish();
+            public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
+//                Uri uri = Uri.parse(url);
+//                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+//                startActivity(intent);
+                Log.d("fileurl", url);
+                String fileName = url.substring(url.lastIndexOf("/") + 1);
+
+                new AlertDialog.Builder(CaptureResultActivity.this).setTitle("提示").setMessage("确定下载文件<"+fileName+">吗?").setNegativeButton(R.string.cancel, null)
+                        .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                DownloadUtil.DownloadFile(CaptureResultActivity.this,url,"/sdcard/uu");
+
+                            }
+                        }).create().show();
             }
         });
     }
 
+
     private void initData() {
 
         Intent intent = getIntent();
@@ -110,4 +123,5 @@ public class CaptureResultActivity extends Activity {
         }
         return super.onKeyDown(keyCode, event);
     }
+
 }

+ 18 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/CommonWebviewActivity.java

@@ -1,15 +1,19 @@
 package com.xzjmyk.pm.activity;
 
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.webkit.DownloadListener;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
+import com.xzjmyk.pm.activity.util.DownloadUtil;
+
 /**
  * Created by RaoMeng on 2016/9/14.
  */
@@ -42,11 +46,19 @@ public class CommonWebviewActivity extends Activity {
 
         mWebView.setDownloadListener(new DownloadListener() {
             @Override
-            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
-                Uri uri = Uri.parse(url);
-                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-                startActivity(intent);
-//                finish();
+            public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
+                Log.d("weburl",url);
+                String fileName = url.substring(url.lastIndexOf("/") + 1);
+
+                new AlertDialog.Builder(CommonWebviewActivity.this).setTitle("提示").setMessage("确定下载文件<"+fileName+">吗?").setNegativeButton(R.string.cancel, null)
+                        .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                DownloadUtil.DownloadFile(CommonWebviewActivity.this,url,"/sdcard/uu");
+
+                            }
+                        }).create().show();
+
             }
         });
 

+ 20 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/MyApplication.java

@@ -11,7 +11,10 @@ import android.os.StrictMode;
 import android.support.multidex.MultiDex;
 import android.util.Log;
 
+import com.android.volley.RequestQueue;
+import com.android.volley.toolbox.Volley;
 import com.baidu.mapapi.SDKInitializer;
+import com.lidroid.xutils.HttpUtils;
 import com.nostra13.universalimageloader.cache.disc.impl.TotalSizeLimitedDiscCache;
 import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
 import com.nostra13.universalimageloader.cache.memory.MemoryCacheAware;
@@ -43,6 +46,8 @@ public class MyApplication extends Application {
     public static Cookie cookie;
     public static Cookie cookieERP;
 
+    public static RequestQueue mRequestQueue;
+    public static HttpUtils mHttpUtils;
 
     private static MyApplication INSTANCE = null;
 
@@ -56,6 +61,11 @@ public class MyApplication extends Application {
         super.onCreate();
         INSTANCE = this;
         ZXingLibrary.initDisplayOpinion(this);
+        mRequestQueue = Volley.newRequestQueue(this);
+
+        mHttpUtils = new HttpUtils();
+        configHttpUtils();
+
 //        CrashReport.initCrashReport(getApplicationContext(), "900050585", false);
         PreferenceUtils.putBoolean(this, Constants.IS_NOTIFICATION, false);//不进行通知
         new Handler().postDelayed(new Runnable() {
@@ -86,6 +96,16 @@ public class MyApplication extends Application {
         mNetWorkObservable = new NetWorkObservable(this);
     }
 
+    /**
+     * 为HttpUtils配置参数
+     */
+    private void configHttpUtils() {
+        mHttpUtils.configRequestThreadPoolSize(4);
+        mHttpUtils.configRequestRetryCount(3);
+        mHttpUtils.configResponseTextCharset("utf-8");
+        mHttpUtils.configTimeout(10000);
+    }
+
     /**
      * 在程序内部关闭时,调用此方法
      */

+ 51 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonUtil.java

@@ -19,6 +19,7 @@ import android.graphics.Matrix;
 import android.graphics.Typeface;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
 import android.text.Spannable;
@@ -53,6 +54,7 @@ import com.xzjmyk.pm.activity.util.DateFormatUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.xmpp.listener.ChatMessageListener;
 
+import java.io.File;
 import java.io.UnsupportedEncodingException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -852,4 +854,53 @@ public class CommonUtil {
         toast.setView(toastLayout);
         toast.show();
     }
+
+
+    /**
+     * 打开一个文件
+     * @param file
+     * @return
+     */
+    public static Intent getFileIntent(File file) {
+        Uri uri = Uri.fromFile(file);
+        String type = getMIMEType(file);
+        Intent intent = new Intent("android.intent.action.VIEW");
+        intent.addCategory("android.intent.category.DEFAULT");
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setDataAndType(uri, type);
+        return intent;
+    }
+
+    /**
+     * 判断文件类型
+     * @param f
+     * @return
+     */
+    public static String getMIMEType(File f){
+        String type = "";
+        String fName = f.getName();
+      /* 取得扩展名 */
+        String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length()).toLowerCase();
+
+      /* 依扩展名的类型决定MimeType */
+        if (end.equals("pdf")) {
+            type = "application/pdf";//
+        } else if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") ||
+                end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
+            type = "audio/*";
+        } else if (end.equals("3gp") || end.equals("mp4")) {
+            type = "video/*";
+        } else if (end.equals("jpg") || end.equals("gif") || end.equals("png") ||
+                end.equals("jpeg") || end.equals("bmp")) {
+            type = "image/*";
+        } else if (end.equals("apk")) {
+            type = "application/vnd.android.package-archive";
+        } else {
+//	              /*如果无法直接打开,就跳出软件列表给用户选择 */
+            type = "*/*";
+        }
+        return type;
+    }
+
+
 }

+ 102 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/DownloadUtil.java

@@ -0,0 +1,102 @@
+package com.xzjmyk.pm.activity.util;
+
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+
+import java.io.File;
+import java.net.URLDecoder;
+
+/**
+ * 下载类
+ *
+ * @author shiquanL
+ */
+@TargetApi(Build.VERSION_CODES.GINGERBREAD)
+@SuppressLint("DefaultLocale")
+public class DownloadUtil {
+    static String FilePath;
+    static BroadcastReceiver receiver;
+
+    /**
+     * @param context 上下文场景
+     * @param url     下载文件的地址
+     * @param path    SD卡保存的路径 如:"/MyDownload",自动在SD下创建该目录。
+     */
+    public static void DownloadFile(Context context, String url, String path) {
+ 
+ /*
+ * 注册广播监听下载完成
+ */
+        receiver = new DownloadCompleteReceiver();
+        context.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
+        /**
+         * 先检测SD卡是否存在
+         */
+        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+            return;
+        }
+         /*
+         * 创建文件夹
+         */
+        String file = Environment.getExternalStorageDirectory().getPath() + path;
+        File files = new File(file);
+        if (files == null || !files.exists()) {
+            files.mkdir();
+        }
+         /*
+         * 截取文件名
+         */
+        String fileName = url.substring(url.lastIndexOf("/") + 1);
+        fileName = URLDecoder.decode(fileName);
+         /*
+         *系统下载服务类
+         */
+        DownloadManager downManager = (DownloadManager) context.getSystemService(Activity.DOWNLOAD_SERVICE);
+        DownloadManager.Request down = new DownloadManager.Request(Uri.parse(url));
+        down.setShowRunningNotification(true);
+        //在通知栏显示
+        down.setVisibleInDownloadsUi(true);
+        //输出目录
+        down.setDestinationInExternalPublicDir(path + "/", fileName);
+        //文件路径
+        FilePath = file + "/" + fileName;
+        //加入下载队列执行
+        downManager.enqueue(down);
+    }
+
+    public static void unregisterReceiver(Context context) {
+        context.unregisterReceiver(receiver);
+    }
+
+    ;
+
+    /**
+     * 监听下载完成
+     *
+     * @author Administrator
+     */
+    public static class DownloadCompleteReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (intent.getAction().equals(
+                    DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
+                //获取文件路径
+                File files = new File(FilePath);
+                //打开这个文件
+                Intent openFile = CommonUtil.getFileIntent(files);
+                context.startActivity(openFile);
+            }
+        }
+    }
+}

BIN
WeiChat/src/main/res/drawable-hdpi/ic_downloading_progress.png


+ 2 - 2
WeiChat/src/main/res/layout/activity_capture_result.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent">
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
 
     <WebView
         android:id="@+id/result_webview"