Browse Source

增加了接口日志记录功能,增加版本更新的权限与分区功能

songw 2 months ago
parent
commit
30c825fc90
23 changed files with 481 additions and 254 deletions
  1. 1 1
      app/build.gradle
  2. 50 41
      app/src/main/java/uas/erp/punaier_wms/application/PdaApplication.java
  3. 1 1
      app/src/main/java/uas/erp/punaier_wms/fragment/BarcodeGenerationFragment.java
  4. 1 1
      app/src/main/java/uas/erp/punaier_wms/fragment/BarcodeSupplePrintFragment.java
  5. 4 4
      app/src/main/java/uas/erp/punaier_wms/fragment/GoodOrBadFragment.java
  6. 1 2
      app/src/main/java/uas/erp/punaier_wms/fragment/IOCOutMakeMaterialOper.java
  7. 2 2
      app/src/main/java/uas/erp/punaier_wms/fragment/InventoryBarcodeFreeze.java
  8. 1 2
      app/src/main/java/uas/erp/punaier_wms/fragment/InventoryBindingFragment.java
  9. 1 2
      app/src/main/java/uas/erp/punaier_wms/fragment/JLTStorageInBarcodeFragment.java
  10. 1 1
      app/src/main/java/uas/erp/punaier_wms/fragment/MSDSplitFragment.java
  11. 20 31
      app/src/main/java/uas/erp/punaier_wms/fragment/VersionUpgradeFragment.java
  12. 1 1
      app/src/main/java/uas/erp/punaier_wms/fragment/WHBreakingBatchFragment.java
  13. 1 1
      app/src/main/java/uas/erp/punaier_wms/fragment/WHCombineBatchFragment.java
  14. 3 1
      app/src/main/java/uas/erp/punaier_wms/util/CommonUtil.java
  15. 62 0
      app/src/main/java/uas/erp/punaier_wms/util/FileUtils.java
  16. 299 0
      app/src/main/java/uas/erp/punaier_wms/util/MyLog.java
  17. 4 2
      app/src/main/java/uas/erp/punaier_wms/util/VolleyRequest.java
  18. 0 145
      app/src/main/java/uas/erp/punaier_wms/util/VollyRequest.java
  19. 1 1
      app/src/main/res/layout/actionbar_withback.xml
  20. 1 1
      app/src/main/res/layout/fragment_iocout_make_material.xml
  21. 3 3
      app/src/main/res/layout/fragment_material_storage.xml
  22. 2 2
      app/src/main/res/layout/fragment_scmake_smtfeederchild_check.xml
  23. 21 9
      app/src/main/res/xml/file_paths.xml

+ 1 - 1
app/build.gradle

@@ -18,7 +18,7 @@ android {
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-        applicationId "erp.erp.punaier_wms"
+        applicationId "uas.erp.punaier_wms"
         minSdkVersion rootProject.ext.android.minSdkVersion
         targetSdkVersion rootProject.ext.android.targetSdkVersion
         versionCode rootProject.ext.android.versionCode

+ 50 - 41
app/src/main/java/uas/erp/punaier_wms/application/PdaApplication.java

@@ -1,45 +1,46 @@
            package uas.erp.punaier_wms.application;
 
-import android.app.Activity;
-import android.app.Application;
-import android.content.Context;
-import android.media.AudioAttributes;
-import android.media.SoundPool;
-import android.os.Build;
-import android.os.CountDownTimer;
-import android.util.Log;
-
-import com.android.volley.RequestQueue;
-import com.android.volley.toolbox.Volley;
-import com.facebook.stetho.Stetho;
-import com.umeng.analytics.MobclickAgent;
-import com.umeng.commonsdk.UMConfigure;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManagerFactory;
-
-import androidx.multidex.MultiDex;
-import uas.erp.punaier_wms.R;
-import uas.erp.punaier_wms.global.GloableParams;
-import uas.erp.punaier_wms.tools.SharedPreUtil;
-import uas.erp.punaier_wms.tools.VolleyUtil;
-import uas.erp.punaier_wms.util.AndroidUtil;
-import uas.erp.punaier_wms.util.Constants;
-import uas.erp.punaier_wms.util.FakeX509TrustManager;
-import uas.erp.punaier_wms.util.SoundUtil;
+           import android.app.Activity;
+           import android.app.Application;
+           import android.content.Context;
+           import android.media.AudioAttributes;
+           import android.media.SoundPool;
+           import android.os.Build;
+           import android.os.CountDownTimer;
+           import android.util.Log;
+
+           import com.android.volley.RequestQueue;
+           import com.android.volley.toolbox.Volley;
+           import com.facebook.stetho.Stetho;
+           import com.umeng.analytics.MobclickAgent;
+           import com.umeng.commonsdk.UMConfigure;
+
+           import java.io.ByteArrayInputStream;
+           import java.io.IOException;
+           import java.io.InputStream;
+           import java.security.KeyManagementException;
+           import java.security.KeyStore;
+           import java.security.KeyStoreException;
+           import java.security.NoSuchAlgorithmException;
+           import java.security.cert.CertificateException;
+           import java.security.cert.CertificateFactory;
+           import java.util.HashMap;
+           import java.util.Map;
+
+           import javax.net.ssl.SSLContext;
+           import javax.net.ssl.SSLSocketFactory;
+           import javax.net.ssl.TrustManagerFactory;
+
+           import androidx.multidex.MultiDex;
+           import uas.erp.punaier_wms.R;
+           import uas.erp.punaier_wms.global.GloableParams;
+           import uas.erp.punaier_wms.tools.SharedPreUtil;
+           import uas.erp.punaier_wms.tools.VolleyUtil;
+           import uas.erp.punaier_wms.util.AndroidUtil;
+           import uas.erp.punaier_wms.util.Constants;
+           import uas.erp.punaier_wms.util.FakeX509TrustManager;
+           import uas.erp.punaier_wms.util.MyLog;
+           import uas.erp.punaier_wms.util.SoundUtil;
 
 /**
  * Created by RaoMeng on 2016/7/28.
@@ -99,7 +100,15 @@ public class PdaApplication extends Application {
         mSoundMap.put(SoundUtil.SOUND_TITAN, mSoundPool.load(this, R.raw.titan, 1));
         //友盟统计SDK
         initUmeng();
+
+        //删除非当天的Log日志, Android8.0以下用不了
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            MyLog.delNotDayFile();
+        }else {
+            MyLog.isFileCreatedTodayDel();
+        }
     }
+
     private CountDownTimer countDownTimer = new CountDownTimer(COUNTDOWN_TIME, COUNTDOWN_INTERVAL) {
 
         @Override
@@ -108,7 +117,7 @@ public class PdaApplication extends Application {
             int secondsRemaining = (int) (millisUntilFinished / 1000);
             int minutesRemaining = secondsRemaining / 60;
             int seconds = secondsRemaining % 60;
-            Log.d("Countdown", "Time remaining: " + minutesRemaining + " minutes, " + seconds + " seconds.");
+            //Log.d("Countdown", "Time remaining: " + minutesRemaining + " minutes, " + seconds + " seconds.");
             // 更新UI
         }
 

+ 1 - 1
app/src/main/java/uas/erp/punaier_wms/fragment/BarcodeGenerationFragment.java

@@ -358,7 +358,7 @@ public class BarcodeGenerationFragment extends BaseFragment implements View.OnCl
                                             Intent intent = new Intent(Intent.ACTION_VIEW);
                                             File assetsFileToCacheDir = FileUtils.getAssetsFileToCacheDir(mActivity, "PrinterShare.apk");
                                             if (Build.VERSION.SDK_INT >= 24) {
-                                                Uri apkUri = FileProvider.getUriForFile(mActivity, "erp.erp.punaier_wms", assetsFileToCacheDir);
+                                                Uri apkUri = FileProvider.getUriForFile(mActivity, "uas.erp.punaier_wms", assetsFileToCacheDir);
                                                 //Granting Temporary Permissions to a URI
                                                 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                                 intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 1 - 1
app/src/main/java/uas/erp/punaier_wms/fragment/BarcodeSupplePrintFragment.java

@@ -214,7 +214,7 @@ public class BarcodeSupplePrintFragment extends BaseFragment {
                                             Intent intent = new Intent(Intent.ACTION_VIEW);
                                             File assetsFileToCacheDir = FileUtils.getAssetsFileToCacheDir(mActivity, "PrinterShare.apk");
                                             if (Build.VERSION.SDK_INT >= 24) {
-                                                Uri apkUri = FileProvider.getUriForFile(mActivity, "erp.erp.punaier_wms", assetsFileToCacheDir);
+                                                Uri apkUri = FileProvider.getUriForFile(mActivity, "uas.erp.punaier_wms", assetsFileToCacheDir);
                                                 //Granting Temporary Permissions to a URI
                                                 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                                 intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 4 - 4
app/src/main/java/uas/erp/punaier_wms/fragment/GoodOrBadFragment.java

@@ -54,7 +54,7 @@ import uas.erp.punaier_wms.util.HttpCallback;
 import uas.erp.punaier_wms.util.HttpParams;
 import uas.erp.punaier_wms.util.LogUtil;
 import uas.erp.punaier_wms.util.StringUtil;
-import uas.erp.punaier_wms.util.VollyRequest;
+import uas.erp.punaier_wms.util.VolleyRequest;
 import uas.erp.punaier_wms.view.ClearableEditText;
 
 
@@ -218,7 +218,7 @@ public class GoodOrBadFragment extends BaseFragment implements View.OnClickListe
             pi_type="";
         }
         progressDialog.show();
-        VollyRequest.getInstance().stringRequest(mStringRequest,
+        VolleyRequest.getInstance().stringRequest(mStringRequest,
                 new HttpParams.Builder()
                         .url(GloableParams.ADDRESS_PDAIO_IN_GETWHCODE)
                         .method(Request.Method.GET)
@@ -287,7 +287,7 @@ public class GoodOrBadFragment extends BaseFragment implements View.OnClickListe
             pi_type="";
         }
         progressDialog.show();
-        VollyRequest.getInstance().stringRequest(mStringRequest,
+        VolleyRequest.getInstance().stringRequest(mStringRequest,
                 new HttpParams.Builder()
                         .url(GloableParams.ADDRESS_PDAIO_IN_GETWHCODE)
                         .method(Request.Method.GET)
@@ -599,7 +599,7 @@ public class GoodOrBadFragment extends BaseFragment implements View.OnClickListe
             pi_type="";
         }
         progressDialog.show();
-        VollyRequest.getInstance().stringRequest(mStringRequest,
+        VolleyRequest.getInstance().stringRequest(mStringRequest,
                 new HttpParams.Builder()
                         .url(GloableParams.ADDRESS_OUTMATERIAL_NEWPRODINOUT)
                         .method(Request.Method.POST)

+ 1 - 2
app/src/main/java/uas/erp/punaier_wms/fragment/IOCOutMakeMaterialOper.java

@@ -110,7 +110,6 @@ import uas.erp.punaier_wms.util.JsonUtils;
 import uas.erp.punaier_wms.util.LogUtil;
 import uas.erp.punaier_wms.util.PrintUtils;
 import uas.erp.punaier_wms.util.VolleyRequest;
-import uas.erp.punaier_wms.util.VollyRequest;
 import uas.erp.punaier_wms.view.ClearableEditText;
 
 /**
@@ -752,7 +751,7 @@ public class IOCOutMakeMaterialOper extends BaseFragment implements View.OnClick
 
     private void getInvertoryBarcode(String barcode) {
         progressDialog.show();
-        VollyRequest.getInstance().stringRequest(mStringRequest,
+        VolleyRequest.getInstance().stringRequest(mStringRequest,
                 new HttpParams.Builder()
                         .url(GloableParams.ADDRESS_GET_INVENTORY_BARCODE_DATA)
                         .method(Request.Method.GET)

+ 2 - 2
app/src/main/java/uas/erp/punaier_wms/fragment/InventoryBarcodeFreeze.java

@@ -22,7 +22,7 @@ import uas.erp.punaier_wms.util.CommonUtil;
 import uas.erp.punaier_wms.util.FastjsonUtil;
 import uas.erp.punaier_wms.util.HttpCallback;
 import uas.erp.punaier_wms.util.HttpParams;
-import uas.erp.punaier_wms.util.VollyRequest;
+import uas.erp.punaier_wms.util.VolleyRequest;
 import uas.erp.punaier_wms.view.ClearableEditText;
 
 public
@@ -115,7 +115,7 @@ class InventoryBarcodeFreeze extends BaseFragment implements View.OnClickListene
             return;
         }
         progressDialog.show();
-        VollyRequest.getInstance().stringRequest(mStringRequest,
+        VolleyRequest.getInstance().stringRequest(mStringRequest,
                 new HttpParams.Builder()
                         .url(GloableParams.ADDRESS_GET_INVENTORY_BARCODE_FREEZE)
                         .method(Request.Method.GET)

+ 1 - 2
app/src/main/java/uas/erp/punaier_wms/fragment/InventoryBindingFragment.java

@@ -75,7 +75,6 @@ import uas.erp.punaier_wms.util.HttpCallback;
 import uas.erp.punaier_wms.util.HttpParams;
 import uas.erp.punaier_wms.util.StringUtil;
 import uas.erp.punaier_wms.util.VolleyRequest;
-import uas.erp.punaier_wms.util.VollyRequest;
 import uas.erp.punaier_wms.view.ClearableEditText;
 import uas.erp.punaier_wms.view.RecyclerItemDecoration;
 import uas.erp.punaier_wms.view.business.CommonSelectPop;
@@ -1299,7 +1298,7 @@ public class InventoryBindingFragment extends BaseFragment implements View.OnCli
                             public void onClick(DialogInterface dialogInterface, int i) {
                                 dialogInterface.dismiss();
                                 progressDialog.show();
-                                VollyRequest.getInstance().stringRequest(new HttpParams.Builder()
+                                VolleyRequest.getInstance().stringRequest(null,new HttpParams.Builder()
                                         .url(GloableParams.ADDRESS_PDAIO_CONFIRMPOST)
                                         .method(Request.Method.POST)
                                         .addParam("piid", mPiid)

+ 1 - 2
app/src/main/java/uas/erp/punaier_wms/fragment/JLTStorageInBarcodeFragment.java

@@ -73,7 +73,6 @@ import uas.erp.punaier_wms.util.HttpCallback;
 import uas.erp.punaier_wms.util.HttpParams;
 import uas.erp.punaier_wms.util.StringUtil;
 import uas.erp.punaier_wms.util.VolleyRequest;
-import uas.erp.punaier_wms.util.VollyRequest;
 import uas.erp.punaier_wms.view.ClearableEditText;
 import uas.erp.punaier_wms.view.RecyclerItemDecoration;
 import uas.erp.punaier_wms.view.business.CommonSelectPop;
@@ -1288,7 +1287,7 @@ public class JLTStorageInBarcodeFragment extends BaseFragment implements View.On
                             public void onClick(DialogInterface dialogInterface, int i) {
                                 dialogInterface.dismiss();
                                 progressDialog.show();
-                                VollyRequest.getInstance().stringRequest(new HttpParams.Builder()
+                                VolleyRequest.getInstance().stringRequest(null,new HttpParams.Builder()
                                         .url(GloableParams.ADDRESS_PDAIO_CONFIRMPOST)
                                         .method(Request.Method.POST)
                                         .addParam("piid", mPiid)

+ 1 - 1
app/src/main/java/uas/erp/punaier_wms/fragment/MSDSplitFragment.java

@@ -294,7 +294,7 @@ public class MSDSplitFragment extends BaseFragment implements View.OnClickListen
                                     Intent intent = new Intent(Intent.ACTION_VIEW);
                                     File assetsFileToCacheDir = FileUtils.getAssetsFileToCacheDir(getActivity(), "PrinterShare.apk");
                                     if (Build.VERSION.SDK_INT >= 24) {
-                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "erp.erp.punaier_wms", assetsFileToCacheDir);
+                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "uas.erp.punaier_wms", assetsFileToCacheDir);
                                         //Granting Temporary Permissions to a URI
                                         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                         intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 20 - 31
app/src/main/java/uas/erp/punaier_wms/fragment/VersionUpgradeFragment.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Environment;
 import android.os.Handler;
 import android.os.Message;
 import android.text.TextUtils;
@@ -19,7 +20,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.android.volley.Request;
 
 import java.io.File;
-import java.io.IOException;
 
 import androidx.annotation.RequiresApi;
 import androidx.core.content.FileProvider;
@@ -29,7 +29,6 @@ import uas.erp.punaier_wms.util.AndroidUtil;
 import uas.erp.punaier_wms.util.CommonUtil;
 import uas.erp.punaier_wms.util.Constants;
 import uas.erp.punaier_wms.util.FastjsonUtil;
-import uas.erp.punaier_wms.util.FileUtils;
 import uas.erp.punaier_wms.util.HttpCallback;
 import uas.erp.punaier_wms.util.HttpParams;
 import uas.erp.punaier_wms.util.VolleyRequest;
@@ -37,8 +36,6 @@ import uas.erp.punaier_wms.util.download.ProgressDownloader;
 import uas.erp.punaier_wms.util.download.ProgressResponseBody;
 import uas.erp.punaier_wms.view.business.CommonProgressPop;
 
-import static uas.erp.punaier_wms.util.Constants.CONSTANT.APK_FILE_NAME;
-
 
 /**
  * Created by RaoMeng on 2020/4/9
@@ -52,6 +49,7 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
     private long breakPoints, contentLength, totalBytes;
     private File file;
     private String mAttachId;
+    private File apkFile;
 
     @Override
     protected int getLayout() {
@@ -80,26 +78,8 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
 
                 breakPoints = 0L;
 
-//                File directory = new File(APK_FILE_PATH);
-                String filesDir = getActivity().getFilesDir().getAbsolutePath();
-                File directory = new File(filesDir + "/punaier_wms/apk");
-                if (!directory.exists() && !directory.isDirectory()) {
-                    boolean mkdirs = directory.mkdirs();
-                } else {
-//                    FileUtils.delAllFile(APK_FILE_PATH);
-                    FileUtils.delAllFile(directory + "/punaier_wms/apk");
-                }
-
-//                file = new File(APK_FILE_PATH, APK_FILE_NAME);
-                file = new File(filesDir + "/punaier_wms/apk", APK_FILE_NAME);
-
-                try {
-                    file.createNewFile();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
                 String downloadUrl = GloableParams.ADDRESS_COMMON_DOWNLOADBYID + "?id=" + mAttachId;
-                mDownloader = new ProgressDownloader(downloadUrl, file, VersionUpgradeFragment.this);
+                mDownloader = new ProgressDownloader(downloadUrl, apkFile, VersionUpgradeFragment.this);
                 mDownloader.download(0L);
             }
         });
@@ -110,6 +90,20 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
         mOldVersionTv.setText(AndroidUtil.getVersionName(mActivity));
         getNewVersionMsg();
 
+        //不同版本分区处理
+        File downloadDir;
+        if (Build.VERSION.SDK_INT >= 29) {
+            // Android 10+ 使用私有目录
+            downloadDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
+        } else {
+            downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+        }
+        if (!downloadDir.exists()) {
+            downloadDir.mkdirs();
+        }
+        String fileName = "update_" + System.currentTimeMillis() + ".apk";
+        apkFile = new File(downloadDir, fileName);
+
         //从API 26开始需要申请安装权限
         if (Build.VERSION.SDK_INT >= 26) {
             if (!isHasInstallPermissionWithO(getActivity())) {
@@ -231,19 +225,14 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
                     CommonUtil.toastNoRepeat(mActivity, "下载完成");
                     mProgressPop.dismiss();
                     try {
-//                        File apk = new File(APK_FILE_PATH, APK_FILE_NAME);
-                        String filesDir = getActivity().getFilesDir().getAbsolutePath();
-                        File apk = new File(filesDir + "/punaier_wms/apk", APK_FILE_NAME);
                         Intent intent = new Intent(Intent.ACTION_VIEW);
+                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         if (Build.VERSION.SDK_INT >= 24) {
-                            Uri apkUri = FileProvider.getUriForFile(mActivity,
-                                    "uas.erp.punaier_wms.fileprovider", apk);
-                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            Uri apkUri = FileProvider.getUriForFile(mActivity, getActivity().getPackageName() +".fileprovider", apkFile);
                             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                             intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                         } else {
-                            intent.setDataAndType(Uri.fromFile(apk), "application/vnd.android.package-archive");
-                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
                         }
                         mActivity.startActivity(intent);
                     } catch (Exception e) {

+ 1 - 1
app/src/main/java/uas/erp/punaier_wms/fragment/WHBreakingBatchFragment.java

@@ -520,7 +520,7 @@ public class WHBreakingBatchFragment extends BaseFragment implements View.OnClic
                                     Intent intent = new Intent(Intent.ACTION_VIEW);
                                     File assetsFileToCacheDir = FileUtils.getAssetsFileToCacheDir(getActivity(), "PrinterShare.apk");
                                     if (Build.VERSION.SDK_INT >= 24) {
-                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "erp.erp.punaier_wms", assetsFileToCacheDir);
+                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "uas.erp.punaier_wms", assetsFileToCacheDir);
                                         //Granting Temporary Permissions to a URI
                                         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                         intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 1 - 1
app/src/main/java/uas/erp/punaier_wms/fragment/WHCombineBatchFragment.java

@@ -366,7 +366,7 @@ public class WHCombineBatchFragment extends BaseFragment implements View.OnClick
                                     Intent intent = new Intent(Intent.ACTION_VIEW);
                                     File assetsFileToCacheDir = FileUtils.getAssetsFileToCacheDir(getActivity(), "PrinterShare.apk");
                                     if (Build.VERSION.SDK_INT >= 24) {
-                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "erp.erp.punaier_wms", assetsFileToCacheDir);
+                                        Uri apkUri = FileProvider.getUriForFile(mActivity, "uas.erp.punaier_wms", assetsFileToCacheDir);
                                         //Granting Temporary Permissions to a URI
                                         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                                         intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 3 - 1
app/src/main/java/uas/erp/punaier_wms/util/CommonUtil.java

@@ -585,9 +585,11 @@ public class CommonUtil {
             if (errorMsg != null && errorMsg.exceptionInfo != null) {
                 errorStr = errorMsg.exceptionInfo;
             } else {
-                errorStr = "系统错误";
+                //errorStr = "系统错误";
+                errorStr = new String(volleyError.networkResponse.data);
             }
         }
+        MyLog.d("aaa","响应失败:" + errorStr);
         //振动提示
         makeNotice();
         /*MediaPlayer mp = new MediaPlayer();

+ 62 - 0
app/src/main/java/uas/erp/punaier_wms/util/FileUtils.java

@@ -15,6 +15,7 @@ import java.io.InputStream;
 import java.security.SecureRandom;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
+import java.util.Calendar;
 
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.SSLContext;
@@ -282,4 +283,65 @@ public class FileUtils {
             return true;
         }
     }
+
+    /**
+     * 判断文件是否为当天创建(使用最后修改时间)
+     * Android 7.0推荐使用此方法
+     */
+    public static boolean isFileCreatedToday(File file) {
+        if (file == null || !file.exists()) {
+            return false;
+        }
+
+        // 获取文件的最后修改时间
+        long lastModified = file.lastModified();
+
+        // 获取当前时间的Calendar
+        Calendar today = Calendar.getInstance();
+
+        // 获取文件时间的Calendar
+        Calendar fileDate = Calendar.getInstance();
+        fileDate.setTimeInMillis(lastModified);
+
+        // 比较年、月、日是否相同
+        return today.get(Calendar.YEAR) == fileDate.get(Calendar.YEAR) &&
+                today.get(Calendar.MONTH) == fileDate.get(Calendar.MONTH) &&
+                today.get(Calendar.DAY_OF_MONTH) == fileDate.get(Calendar.DAY_OF_MONTH);
+    }
+
+    /**
+     * 获取文件创建时间的字符串表示
+     */
+    public static String getFileCreationTimeString(File file) {
+        if (file == null || !file.exists()) {
+            return "文件不存在";
+        }
+
+        long lastModified = file.lastModified();
+        Calendar cal = Calendar.getInstance();
+        cal.setTimeInMillis(lastModified);
+
+        return String.format("%04d-%02d-%02d %02d:%02d:%02d",
+                cal.get(Calendar.YEAR),
+                cal.get(Calendar.MONTH) + 1, // 月份从0开始
+                cal.get(Calendar.DAY_OF_MONTH),
+                cal.get(Calendar.HOUR_OF_DAY),
+                cal.get(Calendar.MINUTE),
+                cal.get(Calendar.SECOND));
+    }
+
+    /**
+     * 格式化文件大小
+     */
+    public static String formatFileSize(long size) {
+        if (size < 1024) {
+            return size + " B";
+        } else if (size < 1024 * 1024) {
+            return String.format("%.2f KB", size / 1024.0);
+        } else if (size < 1024 * 1024 * 1024) {
+            return String.format("%.2f MB", size / (1024.0 * 1024));
+        } else {
+            return String.format("%.2f GB", size / (1024.0 * 1024 * 1024));
+        }
+    }
 }

+ 299 - 0
app/src/main/java/uas/erp/punaier_wms/util/MyLog.java

@@ -0,0 +1,299 @@
+package uas.erp.punaier_wms.util;
+
+import android.annotation.SuppressLint;
+import android.os.Build;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.FileTime;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+
+import androidx.annotation.RequiresApi;
+import uas.erp.punaier_wms.application.PdaApplication;
+
+/**
+ * 带日志文件输入,又可控开关的日志调试
+ */
+@SuppressLint("SimpleDateFormat")
+public class MyLog {
+    public static Boolean MYLOG_SWITCH = true; // 日志文件总开关
+    private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关
+    private static char MYLOG_TYPE = 'v';// 输入日志类型,w代表只输出告警信息等,v代表输出所有信息
+    @SuppressLint("SdCardPath")
+//    private static String MYLOG_PATH_SDCARD_DIR1 = "/sdcard/MSShow";    // 日志文件在sdcard中的路径
+//    private static String MYLOG_PATH_SDCARD_DIR1 = "/data/data/" + PdaApplication.getmContext().getPackageName();  //APP包下创建的文件不需要权限
+    private static String MYLOG_PATH_SDCARD_DIR1 = "/sdcard/Android/data/" + PdaApplication.getmContext().getPackageName();  //模拟器的APP包下创建的文件
+    private static String MYLOG_PATH_SDCARD_DIR2 = "/Log";
+    private static String MYLOG_PATH_SDCARD_DIR = MYLOG_PATH_SDCARD_DIR1 + MYLOG_PATH_SDCARD_DIR2;
+    private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称
+
+    @SuppressLint("SimpleDateFormat")
+    private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式
+
+    private static boolean isDebug = true;        //普通log的开关
+    private static String TAG = "英唐" + "-----------";
+
+    private static volatile MyLog myLog; // 使用 volatile 关键字确保多线程环境下的可见性
+
+    private MyLog() {
+    }
+
+    public static MyLog getInstance() {
+        if (myLog == null) { // 第一次检查,提高效率,避免每次都进行同步
+            synchronized (MyLog.class) { // 同步代码块,保证线程安全
+                if (myLog == null) { // 第二次检查,防止多个线程同时进入同步块时重复创建实例
+                    myLog = new MyLog();
+                    //兼容不同版本分区处理
+                    File downloadDir = null;
+                    if (Build.VERSION.SDK_INT >= 29) {
+                        // Android 10+ 使用私有目录
+                        downloadDir = PdaApplication.getmContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
+                    } else {
+                        downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+                    }
+                    if (!downloadDir.exists()) {
+                        downloadDir.mkdirs();
+                    }
+                    MYLOG_PATH_SDCARD_DIR1 = downloadDir.getAbsolutePath() + File.separator + PdaApplication.getmContext().getPackageName();
+
+                    //Log.e("aaa", "MyLog被创建了: " + MYLOG_PATH_SDCARD_DIR1);
+                }
+            }
+        }
+        return myLog;
+    }
+
+    public static void e(String msg) {
+        if (isDebug) {
+            Log.e(TAG, msg);
+        }
+    }
+
+    public static void w(String msg) {
+        if (isDebug) {
+            Log.w(TAG, msg);
+        }
+    }
+
+    public static void d(String msg) {
+        if (isDebug) {
+            Log.d(TAG, msg);
+        }
+    }
+
+    public static void i(String msg) {
+        if (isDebug) {
+            Log.i(TAG, msg);
+        }
+    }
+
+    public static void w(String tag, Object msg) { // 警告信息
+        log(tag, msg.toString(), 'w');
+    }
+
+    public static void e(String tag, Object msg) { // 错误信息
+        log(tag, msg.toString(), 'e');
+    }
+
+    public static void d(String tag, Object msg) {// 调试信息
+        log(tag, msg.toString(), 'd');
+    }
+
+    public static void i(String tag, Object msg) {//
+        log(tag, msg.toString(), 'i');
+    }
+
+    public static void v(String tag, Object msg) {
+        log(tag, msg.toString(), 'v');
+    }
+
+    public static void w(String tag, String text) {
+        log(tag, text, 'w');
+    }
+
+    public static void e(String tag, String text) {
+        log(tag, text, 'e');
+    }
+
+    public static void d(String tag, String text) {
+        log(tag, text, 'd');
+    }
+
+    public static void i(String tag, String text) {
+        log(tag, text, 'i');
+    }
+
+    public static void v(String tag, String text) {
+        log(tag, text, 'v');
+    }
+
+    /**
+     * 根据tag, msg和等级,输出日志
+     */
+    private static void log(String tag, String msg, char level) {
+        msg = "\r\n" + msg;
+        if (MYLOG_SWITCH) {
+            setInterceptlength(tag, msg, level);
+            if (MYLOG_WRITE_TO_FILE && 'd' == level) {
+                writeLogtoFile(String.valueOf(level), tag, msg);
+            }
+        }
+    }
+
+    public static void setInterceptlength(String tag, String msg,char level) {
+        if (msg.length() > 3000) {
+            // 因为Logcat一次最多能输出4000个字符左右,所以按3000字符分段比较好
+            int chunkCount = msg.length() / 3000; // 分割成多少段
+            for (int i = 0; i <= chunkCount; i++) {
+                int max = 3000 * (i + 1);
+                if (max >= msg.length()) {
+                    if ('e' == level) { // 输出错误信息
+                        Log.e(tag, msg.substring(3000 * i));
+                    } else if ('w' == level) {
+                        Log.w(tag, msg.substring(3000 * i));
+                    } else if ('d' == level) {
+                        Log.d(tag, msg.substring(3000 * i));
+                    } else if ('i' == level) {
+                        Log.i(tag, msg.substring(3000 * i));
+                    } else {
+                        Log.v(tag, msg.substring(3000 * i));
+                    }
+                } else {
+                    if ('e' == level) {
+                        Log.e(tag, msg.substring(3000 * i, max));
+                    } else if ('w' == level) {
+                        Log.w(tag, msg.substring(3000 * i, max));
+                    } else if ('d' == level) {
+                        Log.d(tag, msg.substring(3000 * i, max));
+                    } else if ('i' == level) {
+                        Log.i(tag, msg.substring(3000 * i, max));
+                    } else {
+                        Log.v(tag, msg.substring(3000 * i, max));
+                    }
+                }
+            }
+        } else {
+            if ('e' == level) {
+                Log.e(tag, msg);
+            } else if ('w' == level) {
+                Log.w(tag, msg);
+            } else if ('d' == level) {
+                Log.d(tag, msg);
+            } else if ('i' == level) {
+                Log.i(tag, msg);
+            } else {
+                Log.v(tag, msg);
+            }
+        }
+    }
+
+    /**
+     * 打开日志文件并写入日志,
+     **/
+    private static void writeLogtoFile(String mylogtype, String tag, String text) {
+    	// 新建或打开日志文件
+        isExist(MYLOG_PATH_SDCARD_DIR1);
+        isExist(MYLOG_PATH_SDCARD_DIR);
+        Date nowtime = new Date();
+        //		String needWriteFiel = logfile.format(nowtime);
+        String needWriteMessage = myLogSdf.format(nowtime) + "    " + mylogtype
+                + "    " + tag + "    " + text;
+        File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
+        try {
+            FileWriter filerWriter = new FileWriter(file, true);// 后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖
+            BufferedWriter bufWriter = new BufferedWriter(filerWriter);
+            bufWriter.write(needWriteMessage);
+            bufWriter.newLine();
+            bufWriter.close();
+            filerWriter.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 删除制定的日志文件
+     */
+    public static void delFile() {// 删除日志文件
+        File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
+    public static void isExist(String path) {
+        File file = new File(path);
+        // 判断文件夹是否存在,如果不存在则创建文件夹
+        if (!file.exists()) {
+            file.mkdir();
+        }
+    }
+
+    /**
+     * 取消Android8.0的提示限制
+     */
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    public static void delNotDayFile(){
+        File fileP = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
+        if (fileP.exists()) {
+            Path path = Paths.get(MYLOG_PATH_SDCARD_DIR + "/" + MYLOGFILEName); //文件路径
+            try {
+                // 获取文件的属性
+                BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
+                // 获取文件的创建时间
+                FileTime creationTime = attrs.creationTime();
+                // 转换为LocalDateTime以便于比较
+                //将FileTime对象转换为LocalDateTime以便于与当前日期进行比较。这里使用了系统的默认时区(ZoneId.systemDefault())。如果需要特定时区,可以替换为相应的ZoneId。
+                //通过LocalDateTime 的 toLocalDate()方法将时间转换为仅包含日期(忽略时间),然后与当前日期进行比较。
+                LocalDateTime creationDateTime = creationTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                LocalDateTime now = LocalDateTime.now();
+
+                // 比较是否为当天创建
+                if (isToday(creationDateTime)) {
+                    //System.out.println("文件是今天创建的。");
+                } else {
+                    //System.out.println("文件不是今天创建的。");
+                    delFile();  //删除不是当天日期
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // 辅助方法,检查日期是否为今天
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    private static boolean isToday(LocalDateTime dateTime) {
+        LocalDate today = LocalDate.now();
+        LocalDate fileDate = dateTime.toLocalDate();
+        return today.equals(fileDate);
+    }
+
+    /**
+     * 判断文件是否为当天创建(使用最后修改时间),不同则删除
+     * Android 7.0推荐使用此方法
+     */
+    public static void isFileCreatedTodayDel() {
+        File fileP = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
+        if (fileP.exists()) {
+            if (!FileUtils.isFileCreatedToday(fileP)) {
+                delFile();  //删除不是当天创建的日期
+            }
+        }
+    }
+
+
+
+}

+ 4 - 2
app/src/main/java/uas/erp/punaier_wms/util/VolleyRequest.java

@@ -101,6 +101,7 @@ public class VolleyRequest {
             }
         }
 
+        MyLog.d("aaa","*************************" + "\n" + "接口地址:" + url);
         PdaApplication.mRequestQueue.cancelAll(httpParams.getUrl());
 
         stringRequest = new StringRequest(httpParams.getMethod(), url,
@@ -108,7 +109,8 @@ public class VolleyRequest {
                     @Override
                     public void onResponse(String s) {
                         try {
-                            LogUtil.prinlnLongMsg("responseSucc", s);
+                            //LogUtil.prinlnLongMsg("responseSucc", s);
+                            MyLog.d("aaa","响应成功:" + s);
                             httpCallback.onSuccess(httpParams.getFlag(), s);
                         } catch (Exception e) {
                             e.printStackTrace();
@@ -120,7 +122,7 @@ public class VolleyRequest {
                     public void onErrorResponse(VolleyError volleyError) {
                         String errorToast = CommonUtil.showErrorToast(volleyError, false);
                         try {
-                            LogUtil.e("responErr", errorToast);
+                            //LogUtil.e("responErr", errorToast);
                             if (errorToast.length() >= 500) {
                                 Activity activity=new Activity();
                                 String maName = SharedPreUtil.getString(activity, Constants.FLAG.ACCOUNT_NAME_CACHE, null);

+ 0 - 145
app/src/main/java/uas/erp/punaier_wms/util/VollyRequest.java

@@ -1,145 +0,0 @@
-package uas.erp.punaier_wms.util;
-
-import com.android.volley.AuthFailureError;
-import com.android.volley.DefaultRetryPolicy;
-import com.android.volley.Request;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Map;
-import java.util.Set;
-
-import uas.erp.punaier_wms.R;
-import uas.erp.punaier_wms.application.PdaApplication;
-import uas.erp.punaier_wms.tools.VolleyUtil;
-
-/**
- * @author RaoMeng
- * @describe
- * @date 2018/4/27 11:26
- */
-
-public class VollyRequest {
-    private static VollyRequest instance;
-
-    private VollyRequest() {
-
-    }
-
-    public static final VollyRequest getInstance() {
-        if (instance == null) {
-            synchronized (VollyRequest.class) {
-                if (instance == null) {
-                    return new VollyRequest();
-                }
-            }
-        }
-        return instance;
-    }
-
-    public void stringRequest(StringRequest stringRequest, final HttpParams httpParams, final HttpCallback httpCallback) {
-        stringRequest(stringRequest, httpParams, 10 * 1000, httpCallback);
-    }
-
-    public void stringRequest(final HttpParams httpParams, final HttpCallback httpCallback) {
-        stringRequest(null, httpParams, 10 * 1000, httpCallback);
-    }
-
-    public void stringRequest(final HttpParams httpParams, final int timeoutMs, final HttpCallback httpCallback) {
-        stringRequest(null, httpParams, timeoutMs, httpCallback);
-    }
-
-    public void stringRequest(StringRequest stringRequest, final HttpParams httpParams, final int timeoutMs, final HttpCallback httpCallback) {
-        if (httpParams == null) {
-            throw new IllegalArgumentException("httpParams can not be NULL");
-        }
-        if (httpCallback == null) {
-            throw new IllegalArgumentException("callback can not be NULL");
-        }
-        if (httpParams.getUrl() == null) {
-            throw new IllegalArgumentException("requestUrl can not be NULL");
-        }
-
-        if (!CommonUtil.isNetWorkConnected((PdaApplication.getmContext()))) {
-            try {
-                httpCallback.onFail(httpParams.getFlag(), PdaApplication.getmContext().getString(R.string.net_not_connect));
-                return;
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        String url = httpParams.getUrl();
-        if (httpParams.getMethod() == Request.Method.GET && httpParams.getParams().size() > 0) {
-            Set<Map.Entry<String, String>> entries = httpParams.getParams().entrySet();
-
-            int index = 1;
-            for (Map.Entry<String, String> paramEntry : entries) {
-                if (index == 1) {
-                    try {
-                        url += "?" + paramEntry.getKey() + "=" + URLEncoder.encode(paramEntry.getValue(), "UTF-8");
-                    } catch (UnsupportedEncodingException e) {
-                        url += "?" + paramEntry.getKey() + "=" + paramEntry.getValue();
-                    }
-                } else {
-                    try {
-                        url += "&" + paramEntry.getKey() + "=" + URLEncoder.encode(paramEntry.getValue(), "UTF-8");
-                    } catch (UnsupportedEncodingException e) {
-                        url += "&" + paramEntry.getKey() + "=" + paramEntry.getValue();
-                    }
-                }
-                index++;
-            }
-        }
-
-        PdaApplication.mRequestQueue.cancelAll(httpParams.getTag());
-
-        stringRequest = new StringRequest(httpParams.getMethod(), url,
-                new Response.Listener<String>() {
-                    @Override
-                    public void onResponse(String s) {
-                        try {
-                            LogUtil.prinlnLongMsg("responseSucc", s);
-                            httpCallback.onSuccess(httpParams.getFlag(), s);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                },
-                new Response.ErrorListener() {
-                    @Override
-                    public void onErrorResponse(VolleyError volleyError) {
-                        String errorToast = CommonUtil.showErrorToast(volleyError, false);
-                        try {
-                            httpCallback.onFail(httpParams.getFlag(), errorToast);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                }) {
-            @Override
-            public Map<String, String> getHeaders() throws AuthFailureError {
-                if (httpParams.getHeaders().isEmpty()) {
-                    return VolleyUtil.getVolleyUtil().setCookies();
-                } else {
-                    return httpParams.getHeaders();
-                }
-            }
-
-            @Override
-            protected Map<String, String> getParams() throws AuthFailureError {
-                if (httpParams.getMethod() == Method.POST) {
-                    return httpParams.getParams();
-                }
-                return super.getParams();
-            }
-        };
-
-        stringRequest.setRetryPolicy(new DefaultRetryPolicy(timeoutMs, 0, 1f));
-        stringRequest.setTag(httpParams.getTag());
-        PdaApplication.mRequestQueue.add(stringRequest);
-    }
-}

+ 1 - 1
app/src/main/res/layout/actionbar_withback.xml

@@ -17,7 +17,7 @@
             style="@style/ActionBarTextView"
             android:layout_width="wrap_content"
             android:text="!!!" />
-        <!--<erp.erp.punaier_wms.customview.ClearableEditText
+        <!--<uas.erp.punaier_wms.customview.ClearableEditText
             android:id="@+id/et_actionbar_withback"
             style="@style/ActionBarEditText"/>-->
         <!--<EditText

+ 1 - 1
app/src/main/res/layout/fragment_iocout_make_material.xml

@@ -15,7 +15,7 @@
             android:layout_marginBottom="@dimen/space_bottom_7"
             android:gravity="center_vertical"
             android:orientation="horizontal">
-            <erp.erp.punaier_wms.view.SearchButton
+            <uas.erp.punaier_wms.view.SearchButton
                 android:text="出库单号"
                 android:id="@+id/in_out_no"
                 style="@style/ShowSearchButtonStyle"/>

+ 3 - 3
app/src/main/res/layout/fragment_material_storage.xml

@@ -69,7 +69,7 @@
         android:layout_height="match_parent">
 
         &lt;!&ndash;List&ndash;&gt;
-        <erp.erp.punaier_wms.view.PullToRefreshLayout
+        <uas.erp.punaier_wms.view.PullToRefreshLayout
             android:id="@+id/refresh_view"
             android:layout_marginLeft="16dp"
             android:layout_marginRight="16dp"
@@ -79,7 +79,7 @@
             <include layout="@layout/refresh_head" />
             &lt;!&ndash; 支持所有实现Pullable接口的View &ndash;&gt;
 
-            <erp.erp.punaier_wms.view.PullableListView
+            <uas.erp.punaier_wms.view.PullableListView
                 android:id="@+id/material_storage_plv"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
@@ -89,7 +89,7 @@
 
             <include layout="@layout/load_more" />
 
-        </erp.erp.punaier_wms.view.PullToRefreshLayout>
+        </uas.erp.punaier_wms.view.PullToRefreshLayout>
         <include layout="@layout/null_item"/>
     </RelativeLayout>-->
 

+ 2 - 2
app/src/main/res/layout/fragment_scmake_smtfeederchild_check.xml

@@ -120,7 +120,7 @@
                             android:textColor="@color/body_text_1"
                             android:textSize="16sp" />
 
-                        <!--<erp.erp.punaier_wms.view.ClearableEditText-->
+                        <!--<uas.erp.punaier_wms.view.ClearableEditText-->
                         <!--android:id="@+id/smt_check_location_et"-->
                         <!--style="@style/EditTextLineStyle"-->
                         <!--android:layout_width="0dp"-->
@@ -162,7 +162,7 @@
                             android:textColor="@color/body_text_1"
                             android:textSize="16sp" />
                         <!--
-                                            <erp.erp.punaier_wms.view.ClearableEditText
+                                            <uas.erp.punaier_wms.view.ClearableEditText
                                                 android:id="@+id/smt_check_prodcode_et"
                                                 style="@style/EditTextLineStyle"
                                                 android:layout_width="0dp"

+ 21 - 9
app/src/main/res/xml/file_paths.xml

@@ -1,15 +1,27 @@
 <?xml version="1.0" encoding="utf-8"?>
-<paths xmlns:android="http://schemas.android.com/apk/res/android">
+<paths>
+<!-- 外部存储根目录 -->
+<external-path
+    name="external"
+    path="." />
 
-   <!-- <external-path
-        path="Android/data/erp.erp.punaier_wms/"
-        name="files_root" />
-    <external-path path="." name="external_storage_root" />-->
+<!-- 下载目录 -->
+<external-path
+    name="download"
+    path="Download" />
 
-    <external-path name="ext_root" path="download"/>
+<!-- 应用私有目录 -->
+<external-files-path
+    name="files"
+    path="." />
 
-    <root-path
-        name="root_path"
-        path="." />
+<!-- 缓存目录 -->
+<external-cache-path
+    name="cache"
+    path="." />
 
+<!-- 内部存储目录 -->
+<files-path
+    name="internal"
+    path="." />
 </paths>