Explorar o código

增加版本分区处理,优化IQC与FQC附件上传功能

songw hai 2 meses
pai
achega
fd3e01d89e

+ 8 - 2
app/src/main/AndroidManifest.xml

@@ -17,11 +17,17 @@
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
-    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
-
     <uses-permission android:name="android.permission.READ_CLIPBOARD" />
     <uses-permission android:name="android.permission.WRITE_CLIPBOARD" />
 
+    <!-- Android 11+ 查询已安装应用权限 -->
+    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
+
+    <!-- 8.0手机安装软件 -->
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
+    <!-- 允许装载和卸载文件系统权限 -->
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+
     <application
         android:name=".application.PdaApplication"
         android:allowBackup="true"

+ 2 - 1
app/src/main/java/com/uas/hystorage/fragment/FqcReportUpload.java

@@ -164,6 +164,8 @@ public class FqcReportUpload extends PictureSelectorFragment {
                     MyLog.e("aaa","图库路径是:" + selectedImagePaths.get(i));
                 }
                 // 批量上传图片
+                fujianList1.clear();
+                fujianList1.add(new AnnexBean(true, "", "", false));
                 uploadImages(selectedImagePaths);
             }
         });
@@ -504,7 +506,6 @@ public class FqcReportUpload extends PictureSelectorFragment {
                                 String mEnclusureId = FastjsonUtil.getText(resultObject, "id");
                                 String s = removeSpace(mEnclusureId);
                                 String s1 = removeSpace2(s);
-                                Log.d("aaa", "切割后的数据: " + s1 + "");
                                 fujianList1.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));
                             } catch (IOException e) {
                                 e.printStackTrace();

+ 2 - 2
app/src/main/java/com/uas/hystorage/fragment/IqcReportUpload.java

@@ -83,7 +83,6 @@ public class IqcReportUpload extends PictureSelectorFragment {
     private String ve_id = "";
     private String ve_code = "";
     private boolean isModify = false;   //是否修改过附件
-//    private Button bt_return;
 
 
     @Override
@@ -162,6 +161,8 @@ public class IqcReportUpload extends PictureSelectorFragment {
                     MyLog.e("aaa","图库路径是:" + selectedImagePaths.get(i));
                 }
                 // 批量上传图片
+                fujianList1.clear();
+                fujianList1.add(new AnnexBean(true, "", "", false));
                 uploadImages(selectedImagePaths);
             }
         });
@@ -521,7 +522,6 @@ public class IqcReportUpload extends PictureSelectorFragment {
                                 String mEnclusureId = FastjsonUtil.getText(resultObject, "id");
                                 String s = removeSpace(mEnclusureId);
                                 String s1 = removeSpace2(s);
-                                Log.d("aaa", "切割后的数据: " + s1 + "");
                                 fujianList1.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));
                             } catch (IOException e) {
                                 e.printStackTrace();

+ 1 - 0
app/src/main/java/com/uas/hystorage/fragment/QualityComplaintsAddFragment.java

@@ -91,6 +91,7 @@ public class QualityComplaintsAddFragment<T extends QualityBaseBean> extends Bas
     private RecyclerView mSelectRecyclerView;
     private List<String> mSelectList;
     private SrtypeAdapter mSelectAdapter;
+
     private int mSelectPositon = -1, mFormPosition;
     private String mStatuscode;
     private OnFormChangeListener mOnFormChangeListener;

+ 2 - 4
app/src/main/java/com/uas/hystorage/fragment/ReportPageFra.java

@@ -213,8 +213,6 @@ public class ReportPageFra extends PictureSelectorFragment {
         setOnSetPictureListListener(new OnSetPictureListListener() {
             @Override
             public void onPictureList(List<String> list) {
-
-
                 if (getType() == REQUEST_CODE1) {
                     fujian = 1;
                 } else if (getType() == REQUEST_CODE2) {
@@ -244,6 +242,8 @@ public class ReportPageFra extends PictureSelectorFragment {
                     MyLog.e("aaa","图库路径是:" + selectedImagePaths.get(i));
                 }
                 // 批量上传图片
+                fujianList1.clear();
+                fujianList1.add(new AnnexBean(true, "", "", false));
                 uploadImages(selectedImagePaths);
             }
         });
@@ -978,14 +978,12 @@ public class ReportPageFra extends PictureSelectorFragment {
                                 String mEnclusureId = FastjsonUtil.getText(resultObject, "id");
                                 String s = removeSpace(mEnclusureId);
                                 String s1 = removeSpace2(s);
-                                Log.d("aaa", "切割后的数据: " + s1 + "");
                                 if (fujian == 1) {
 //                                    templist.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));
                                     for (int i = 0; i < fujianList1.size(); i++) {
                                         MyLog.e("aaa","是否为+号" + fujianList1.get(i).isAddImage() + "当前的id是:" + fujianList1.get(i).getImageID());
                                     }
                                     fujianList1.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));
-
                                 } else if (fujian == 2) {
 //                                    templist.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));
                                     fujianList2.add(new AnnexBean(false, mFile.getAbsolutePath(), s1 + ";", true));

+ 86 - 32
app/src/main/java/com/uas/hystorage/fragment/VersionUpgradeFragment.java

@@ -1,16 +1,21 @@
 package com.uas.hystorage.fragment;
 
+import android.app.Activity;
+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.support.annotation.RequiresApi;
 import android.support.v4.content.FileProvider;
 import android.text.TextUtils;
 import android.view.KeyEvent;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -22,7 +27,6 @@ import com.uas.hystorage.util.AndroidUtil;
 import com.uas.hystorage.util.CommonUtil;
 import com.uas.hystorage.util.Constants;
 import com.uas.hystorage.util.FastjsonUtil;
-import com.uas.hystorage.util.FileUtils;
 import com.uas.hystorage.util.HttpCallback;
 import com.uas.hystorage.util.HttpParams;
 import com.uas.hystorage.util.VollyRequest;
@@ -31,10 +35,6 @@ import com.uas.hystorage.util.down.ProgressDownloader;
 import com.uas.hystorage.util.down.ProgressResponseBody;
 
 import java.io.File;
-import java.io.IOException;
-
-import static com.uas.hystorage.util.Constants.CONSTANT.APK_FILE_NAME;
-import static com.uas.hystorage.util.Constants.CONSTANT.APK_FILE_PATH;
 
 
 /**
@@ -50,6 +50,10 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
     private File file;
     private String mAttachId;
     private StringRequest mStringRequest;
+
+    private File apkFile;
+
+
     @Override
     protected int getLayout() {
         return R.layout.fragment_version_upgrade;
@@ -76,20 +80,24 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
                 mProgressPop.showPopupWindow();
 
                 breakPoints = 0L;
-                File directory = new File(APK_FILE_PATH);
-                if (!directory.exists() && !directory.isDirectory()) {
-                    boolean mkdirs = directory.mkdirs();
-                } else {
-                    FileUtils.delAllFile(APK_FILE_PATH);
-                }
-                file = new File(APK_FILE_PATH, APK_FILE_NAME);
-                try {
-                    file.createNewFile();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
+//                File directory = new File(APK_FILE_PATH);
+//                if (!directory.exists() && !directory.isDirectory()) {
+//                    boolean mkdirs = directory.mkdirs();
+//                } else {
+//                    FileUtils.delAllFile(APK_FILE_PATH);
+//                }
+//                file = new File(APK_FILE_PATH, 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.download(0L);
+
                 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);
             }
         });
@@ -100,8 +108,64 @@ 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())) {
+                startInstallPermissionSettingActivity(getActivity());
+            }
+        }
+    }
+
+    /**
+     * 检测是否拥有安装未知应用权限canRequestPackageInstalls
+     */
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    private boolean isHasInstallPermissionWithO(Context context){
+        if (context == null){
+            return false;
+        }
+        return context.getPackageManager().canRequestPackageInstalls();
     }
 
+    /**
+     * 如果没有权限,则申请安装未知应用权限(打开获取权限界面)
+     */
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    private void startInstallPermissionSettingActivity(Context context) {
+        if (context == null) {
+            return;
+        }
+        Intent intent = new Intent();
+        //获取当前apk包URI,并设置到intent中(这一步设置,可让“未知应用权限设置界面”只显示当前应用的设置项)
+        Uri packageURI = Uri.parse("package:" + context.getPackageName());
+        intent.setData(packageURI);
+        //设置不同版本跳转未知应用的动作
+        if (Build.VERSION.SDK_INT >= 26) {
+            //intent = new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
+            intent.setAction(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
+        } else {
+            intent.setAction(android.provider.Settings.ACTION_SECURITY_SETTINGS);
+        }
+        ((Activity) context).startActivity(intent);
+        Toast.makeText(getActivity(), "请打开未知应用安装权限", Toast.LENGTH_SHORT).show();
+    }
+
+
     private void getNewVersionMsg() {
         progressDialog.show();
 
@@ -135,15 +199,9 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
                     public void onFail(int flag, String failStr) throws Exception {
                         progressDialog.dismiss();
                         CommonUtil.toastNoRepeat(mActivity, failStr);
-
                     }
 
                 });
-
-
-
-
-
     }
 
     @Override
@@ -171,7 +229,6 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
         }
     }
 
-
     private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -189,20 +246,17 @@ public class VersionUpgradeFragment extends BaseFragment implements ProgressResp
                     }
                     break;
                 case Constants.CONSTANT.DOWNLOAD_SUCCESS:
-                    CommonUtil.toastNoRepeat(mActivity, getResources().getString(R.string.download_completes));
+                    CommonUtil.toastNoRepeat(mActivity, "下载完成");
                     mProgressPop.dismiss();
                     try {
-                        File apk = new File(APK_FILE_PATH, 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,
-                                    "com.uas.hystorage.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) {

+ 34 - 2
app/src/main/java/com/uas/hystorage/util/MyLog.java

@@ -115,7 +115,21 @@ public class MyLog {
         msg = "\r\n" + msg;
         if (MYLOG_SWITCH) {
             if ('e' == level && ('e' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { // 输出错误信息
-                Log.e(tag, msg);
+                //Log.e(tag, msg);
+                if (msg.length() > 4000) {
+                    // 因为Logcat一次最多能输出4000个字符左右,所以我们按4000字符分段
+                    int chunkCount = msg.length() / 4000; // 分割成多少段
+                    for (int i = 0; i <= chunkCount; i++) {
+                        int max = 4000 * (i + 1);
+                        if (max >= msg.length()) {
+                            Log.e(tag, msg.substring(4000 * i));
+                        } else {
+                            Log.e(tag, msg.substring(4000 * i, max));
+                        }
+                    }
+                } else {
+                    Log.d(tag, msg);
+                }
             } else if ('w' == level && ('w' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
                 Log.w(tag, msg);
             } else if ('d' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
@@ -125,12 +139,29 @@ public class MyLog {
             } else {
                 Log.v(tag, msg);
             }
-            if (MYLOG_WRITE_TO_FILE && 'd' == MYLOG_TYPE) {
+            if (MYLOG_WRITE_TO_FILE && 'd' == level) {
                 writeLogtoFile(String.valueOf(level), tag, msg);
             }
         }
     }
 
+    public static void logLongMessage(String tag, String message) {
+        if (message.length() > 4000) {
+            // 因为Logcat一次最多能输出4000个字符左右,所以我们按4000字符分段
+            int chunkCount = message.length() / 4000; // 分割成多少段
+            for (int i = 0; i <= chunkCount; i++) {
+                int max = 4000 * (i + 1);
+                if (max >= message.length()) {
+                    Log.d(tag, message.substring(4000 * i));
+                } else {
+                    Log.d(tag, message.substring(4000 * i, max));
+                }
+            }
+        } else {
+            Log.d(tag, message);
+        }
+    }
+
     /**
      * 打开日志文件并写入日志,
      **/
@@ -227,4 +258,5 @@ public class MyLog {
     }
 
 
+
 }

+ 28 - 1
app/src/main/res/xml/file_paths.xml

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