Преглед изворни кода

修复下载管理界面中安装打开状态不对的问题,但是游戏模块中的状态还有问题;
升级版本为2.0.1

zengjiebin пре 8 година
родитељ
комит
29fb39bd15

+ 1 - 1
app/src/main/java/com/kfzs/duanduan/ActDownloadMgr.java

@@ -278,7 +278,7 @@ public class ActDownloadMgr extends BaseCompatActivity {
                 }
                 break;
             case DownloadTaskService.STATUS_FINISH:
-                boolean isPkgInstalled = ApkUtils.getInstance().isPkgInstalledRealTime(downloadTask.getMPackageName());
+                boolean isPkgInstalled = ApkUtils.getInstance().isPkgInstalled(downloadTask.getMPackageName());
                 if (isPkgInstalled) {
                     int apkStatus = ApkUtils.getInstance().comparePkgVersionCode(downloadTask.getMPackageName(), downloadTask.getMVersionCode());
                     if (apkStatus == CompareResult.EQUALS || apkStatus == CompareResult.LT) {

+ 0 - 12
app/src/main/java/com/kfzs/duanduan/KFZSApp.java

@@ -61,7 +61,6 @@ public class KFZSApp extends MultiDexApplication {
 
     public List<BaseCompatActivity> appCompatActivityList = new ArrayList<BaseCompatActivity>();
 
-    private Map<String, PackageInfo> installedApkContainer;
     public static final int MAX_DOWNLOAD_TASK_SIZE = 5;
     public HashMap<String, String> mRealDownloadUrl;
 
@@ -212,17 +211,6 @@ public class KFZSApp extends MultiDexApplication {
         application = this;
     }
 
-
-    /**
-     * Preload all installed packages to memory
-     */
-    public Map<String, PackageInfo> preloadPackagesInfo() {
-        if (null == installedApkContainer) {
-            installedApkContainer = ApkUtils.getInstalledApks(this);
-        }
-        return installedApkContainer;
-    }
-
     public Map<String, PackageInfo> loadPackagesInfoRealTime() {
         return ApkUtils.getInstalledApks(this);
     }

+ 0 - 121
app/src/main/java/com/kfzs/duanduan/fragment/OemFragment.java

@@ -1,121 +0,0 @@
-package com.kfzs.duanduan.fragment;
-
-import android.app.DownloadManager;
-import android.content.BroadcastReceiver;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.View;
-import android.webkit.DownloadListener;
-import android.webkit.JavascriptInterface;
-import android.webkit.WebChromeClient;
-import android.webkit.WebView;
-import android.webkit.WebViewClient;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.kfzs.duanduan.BaseCompatFragment;
-import com.kfzs.duanduan.KFZSApp;
-import com.sheep.jiuyan.samllsheep.R;
-import com.kfzs.duanduan.data.graph.provider.current.Current;
-import com.kfzs.duanduan.datashare.AppDownloadDatabaseHelper;
-import com.kfzs.duanduan.datashare.DDProviderHelper;
-import com.kfzs.duanduan.datashare.provider.appdownload.AppdownloadBean;
-import com.kfzs.duanduan.oem.DownLoadAppUtil;
-import com.kfzs.duanduan.oem.UtilParamsWebview;
-import com.kfzs.duanduan.utils.dlg.ViewFindUtils;
-
-import static android.content.Context.DOWNLOAD_SERVICE;
-
-/**
- * oem
- * Created by Administrator on 2017/12/27.
- */
-
-public class OemFragment extends BaseCompatFragment {
-
-    private boolean mIsLogin = false;//是否已经是登录状态
-    private WebView mWebView;
-    BroadcastReceiver receiver, clickedReceiver;
-    DownloadManager downloadManager;
-    protected KFZSApp app;
-    @Override
-    protected void initView(Bundle savedInstanceState) {
-        setContentView(R.layout.oem_fragment);
-        app = KFZSApp.getInstance();
-//        StatusBarUtil.setColor(this, getResources().getColor(R.color.colorPrimary), 0);
-
-        //隐藏空空如也
-//        ViewFindUtils.find(mContentView, R.id.download_mgr_empty_view).setVisibility(View.GONE);
-        mWebView = (WebView) mContentView.findViewById(R.id.web_main_activity);
-        mWebView.getSettings().setJavaScriptEnabled(true);
-        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
-        mWebView.setWebChromeClient(new WebChromeClient());
-        mWebView.setWebViewClient(new WebViewClient());
-        mWebView.loadUrl("http://oem.kuaifazs.com/?t=1" + UtilParamsWebview.getInstance().getParams(getActivity()));
-//        mWebView.loadUrl("http://testten.kuaifazs.com/?t=1" + UtilParamsWebview.getInstance().getParams(getActivity()));
-        mWebView.setDownloadListener(new MyWebViewDownLoadListener());
-        mWebView.addJavascriptInterface(new JsInteraction(), "nameIconUrl");
-
-
-        downloadManager = (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE);
-        DownLoadAppUtil.getInstance(getActivity()).initNotificationClickReceiver(clickedReceiver, downloadManager);//下载过程通知
-        DownLoadAppUtil.getInstance(getActivity()).initFinishRecicever(receiver, downloadManager);//完成后通知
-    }
-
-
-    private class MyWebViewDownLoadListener implements DownloadListener {
-        @Override
-        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
-                                    long contentLength) {
-            return;
-        }
-    }
-
-
-    public class JsInteraction {
-        @JavascriptInterface
-        public void getNameIcon(String name, String icon, String url, String pkgName, String interfaceName) {   //提供给js调用的方法
-            if(name == null){
-                return;
-            }
-            AppdownloadBean appDownloadBean = new AppdownloadBean();
-            appDownloadBean.setName(name);
-            appDownloadBean.setIcon(icon);
-            appDownloadBean.setUrl(url);
-            appDownloadBean.setPkgName(pkgName);
-            appDownloadBean.setInterfaceName(interfaceName);
-
-//            if(appDownloadBean != null){
-//                DownLoadAppUtil.getInstance(getActivity()).sendRequest(appDownloadBean);
-//                return;
-//            }
-
-            //是否存在这个下载包
-            if(!AppDownloadDatabaseHelper.getInstance().setApps(getActivity(), appDownloadBean)){
-                Toast.makeText(getActivity().getApplicationContext(), name+"后台下载中,请勿重复操作!", Toast.LENGTH_LONG).show();
-                return;
-            }
-            Toast.makeText(getActivity().getApplicationContext(), name+"后台下载中!", Toast.LENGTH_LONG).show();
-            DownLoadAppUtil.getInstance(getActivity()).downloadApp(mWebView, appDownloadBean ,downloadManager);
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        checkLogin();
-    }
-
-    private void checkLogin(){
-
-        Current lastUser = DDProviderHelper.getInstance().getLastUser(getContext());
-        mIsLogin = (lastUser == null || TextUtils.isEmpty(lastUser.getMUserId()));
-
-        int showStatus = mIsLogin ? View.VISIBLE : View.GONE;
-        //隐藏空空如也
-        ViewFindUtils.find(mContentView, R.id.download_mgr_empty_view).setVisibility(showStatus);
-        ((TextView)ViewFindUtils.find(mContentView, R.id.txt_list_empty)).setText("请先登录!");
-    }
-
-
-}

+ 4 - 3
app/src/main/java/com/kfzs/duanduan/oem/AppAddOrdelReceiver.java

@@ -9,6 +9,7 @@ import android.os.Looper;
 import com.alibaba.fastjson.JSONObject;
 import com.kfzs.duanduan.datashare.DDProviderHelper;
 import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
+import com.kfzs.duanduan.utils.ApkUtils;
 import com.sheep.gamegroup.model.api.BaseMessageConverter;
 import com.sheep.gamegroup.util.ConnectAddress;
 import com.sheep.gamegroup.util.DeviceUtil;
@@ -36,7 +37,7 @@ import okhttp3.Response;
 public class AppAddOrdelReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(final Context context, final Intent intent) {
-        if(intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)){
+        if(Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())){
             try {
 
                 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@@ -71,8 +72,8 @@ public class AppAddOrdelReceiver extends BroadcastReceiver {
             }
         }
 
-        if(intent.getAction().equals(Intent.ACTION_PACKAGE_INSTALL)){
-
+        if(Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction()) || Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction()) || Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())){
+            ApkUtils.getInstance().clear();
         }
     }
 

+ 0 - 331
app/src/main/java/com/kfzs/duanduan/oem/DownLoadAppUtil.java

@@ -1,331 +0,0 @@
-package com.kfzs.duanduan.oem;
-
-import android.app.DownloadManager;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.Message;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.Gravity;
-import android.webkit.JavascriptInterface;
-import android.webkit.WebView;
-import android.widget.Toast;
-
-import com.kfzs.duanduan.datashare.AppDownloadDatabaseHelper;
-import com.kfzs.duanduan.datashare.provider.appdownload.AppdownloadBean;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.util.Random;
-
-import static android.content.Intent.ACTION_PACKAGE_ADDED;
-
-/**
- * App下载帮助页面
- * Created by Administrator on 2017/12/14.
- */
-
-public class DownLoadAppUtil {
-
-    public static DownLoadAppUtil downLoadAppUtil;
-    private static Context mContext;
-    BroadcastReceiver receiver;
-
-    public static DownLoadAppUtil getInstance(Context context){
-        mContext = context;
-        if(null == downLoadAppUtil){
-            downLoadAppUtil = new DownLoadAppUtil();
-        }
-        return downLoadAppUtil;
-    }
-
-
-    public class JsInteraction {
-        @JavascriptInterface
-        public void getNameIcon(String name, String icon, String url) {   //提供给js调用的方法
-            Log.e("js_interaction---",name+"");
-            Toast.makeText(mContext.getApplicationContext(), name, Toast.LENGTH_LONG).show();
-        }
-    }
-
-    public void downloadApp(WebView mWebView, AppdownloadBean appDownloadBean, DownloadManager downloadManager){
-        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
-            Toast toast =  Toast.makeText(mContext, "需要SD卡。", Toast.LENGTH_LONG);
-            toast.setGravity(Gravity.CENTER, 0, 0);
-            toast.show();
-            return;
-        }
-
-        if(appDownloadBean == null ){
-            return;
-        }
-
-
-        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(appDownloadBean.getUrl()));
-        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
-        request.setDestinationInExternalFilesDir(mContext,Environment.DIRECTORY_DOWNLOADS, appDownloadBean.getName()+"");
-            request.allowScanningByMediaScanner();
-        request.setVisibleInDownloadsUi(true);
-        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
-        reference = downloadManager.enqueue(request);
-
-    }
-
-    /**
-     * 下载完成后通知
-     */
-    public void initFinishRecicever(BroadcastReceiver receiver, final DownloadManager downloadManager){
-
-        IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
-        receiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                long references = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
-                initDownLoadUri(references ,downloadManager);
-
-            }
-        };
-        mContext.registerReceiver(receiver, intentFilter);
-
-    }
-    /**
-     * 安装完成后通知
-     */
-    public void installFinishRecicever(BroadcastReceiver receiver, final DownloadManager downloadManager){
-        IntentFilter intentFilter = new IntentFilter();
-//        intentFilter.s(Intent.ACTION_PACKAGE_ADDED);
-        receiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-
-                if(intent.getAction().equals(ACTION_PACKAGE_ADDED)) {
-                    String packages = intent.getDataString();
-                    String packageName = intent.getPackage();
-                }
-
-            }
-        };
-        mContext.registerReceiver(receiver, intentFilter);
-    }
-    /**
-     * 用户查询文件下载地址的索引
-     */
-    private Cursor myDownload;
-    private String statusMsg;
-    long reference;
-    String appName = "";
-    public synchronized void initDownLoadUri(long re, DownloadManager downloadManager){
-        DownloadManager.Query query = new DownloadManager.Query();
-        query.setFilterById(re);
-        myDownload = downloadManager.query(query);
-        if(myDownload.moveToFirst()){
-            int fileNameIdx = myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
-            int fileUriIdx = myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
-            //文件名
-            final String fileName = myDownload.getString(fileNameIdx);
-            //文件地址
-            String fileUrl = myDownload.getString(fileUriIdx);
-
-            Log.e("fileName----fileUrl","fileName:"+fileName+",fileUrl:"+fileUrl);
-            //当前状态
-            int status = myDownload.getInt(myDownload.getColumnIndex(DownloadManager.COLUMN_STATUS));
-            switch (status){
-                case DownloadManager.STATUS_PAUSED:
-                    statusMsg = "STATUS_PAUSED";
-                    break;
-                case DownloadManager.STATUS_PENDING:
-                    statusMsg = "STATUS_PENDING";
-                    break;
-                case DownloadManager.STATUS_RUNNING:
-                    statusMsg = "STATUS_RUNNING";
-                    break;
-                case DownloadManager.STATUS_SUCCESSFUL:
-                    statusMsg = "STATUS_SUCCESSFUL";
-                    //获取文件 "file://"
-                    String startPath = Environment.getExternalStorageDirectory().getAbsolutePath()
-                            + File.separator
-                            + "Android"
-                            + File.separator
-                            + "data"
-                            + File.separator
-                            + mContext.getPackageName()
-                            + File.separator
-                            + "files"
-                            + File.separator;
-                    String pks = GetPackageNmeHlpe.getInstance().getPackageNames(mContext, fileName);
-                    if(TextUtils.isEmpty(pks)){
-                        return;
-                    }
-                    final AppdownloadBean appdownloadBean = AppDownloadDatabaseHelper.getInstance().getApps(mContext, pks);
-                    if(appdownloadBean != null){
-
-                        try {
-                            new Thread() {
-                                @Override
-                                public void run() {
-                                    try {
-                                        appdownloadBean.setStaus(1);
-//                                        String packageName = appdownloadBean.getPkgName(),
-//                                                interfaceName = appdownloadBean.getInterfaceName(),
-//                                                staus = 1 +"";
-//                                        String url_data = "http://testten.kuaifazs.com:7777/recall?packageName="+ URLEncoder.encode(packageName,"utf8")+"&interfaceName="+interfaceName+"&status="+staus+ UtilParamsWebview.getInstance().getParams(mContext);
-                                        UtilParamsWebview.getInstance().returnBitMap(AppDownloadUtil.getInstance().accessInterfaceNetwork(mContext, AppDownloadUtil.URL, appdownloadBean));
-
-                                        installFile(fileName);
-                                        AppDownloadDatabaseHelper.getInstance().setApps(mContext ,appdownloadBean);
-                                    } catch (Exception e) {
-                                        e.printStackTrace();
-                                    }
-                                }
-                            }.start();
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-
-//                        mWebView.loadUrl("http://testten.kuaifazs.com/?t=1" + UtilParamsWebview.getInstance().getParams(mContext));
-                        break;
-                    }
-                    break;
-                case DownloadManager.STATUS_FAILED:
-                    statusMsg = "STATUS_FAILED";
-                    break;
-                default:
-                    statusMsg = "unknow status";
-                    break;
-            }
-        }
-    }
-
-    /**
-     * 下载过程点击通知
-     */
-    public void initNotificationClickReceiver(BroadcastReceiver clickedReceiver, final DownloadManager downloadManager) {
-        IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_NOTIFICATION_CLICKED);
-        clickedReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                String pN = intent.getStringExtra("packge_name");
-                long clickReferences = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
-                String extraId = DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS;
-                long[] references = intent.getLongArrayExtra(extraId);
-                for (long refer : references) {
-                    if (refer == clickReferences) {
-                        initDownLoadUri(refer ,downloadManager);
-                        if("STATUS_SUCCESSFUL".equals(statusMsg)) {
-//                            installFile();
-                        }else{
-                            Toast.makeText(mContext, "下载还未完成", Toast.LENGTH_SHORT).show();
-                        }
-                        myDownload.close();
-                    }
-                }
-            }
-        };
-        mContext.registerReceiver(clickedReceiver, intentFilter);
-    }
-
-
-    /**
-     * 跳转到安装界面--安装文件
-     */
-    private synchronized void installFile(String fileName) {
-        //跳转到安装界面
-        Intent i = new Intent();
-        i.setAction(Intent.ACTION_VIEW);
-        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
-        Log.e("fileName----appname","fileName:"+fileName+",appname:"+appName);
-        if(fileName == null){
-            return;
-        }
-        i.setDataAndType(Uri.parse("file://" + fileName), "application/vnd.android.package-archive");
-        mContext.startActivity(i);
-    }
-
-    /**
-     * test
-     */
-    public void sendRequest(final AppdownloadBean appdownloadBean){
-        try{
-            if(appdownloadBean == null){
-                return;
-            }
-            Message message = mHandler.obtainMessage();
-            message.what = 1;
-            message.obj = appdownloadBean;
-            mHandler.sendMessageDelayed(message, RandomNum() * 1000);
-
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-
-    }
-
-    /**
-     * 生成随机数
-     */
-    private int RandomNum(){
-        int min = 5;
-        int max = 9;
-        Random random = new Random();
-        int randomNum = random.nextInt(max)%(max -min + 1) +min;
-        Log.e("--------", randomNum+"");
-        return randomNum;
-    }
-
-    Handler mHandler = new Handler(){
-        @Override
-        public void handleMessage(Message msg) {
-            super.handleMessage(msg);
-            switch (msg.what){
-                case 0: // 安装成功请求
-                    try{
-                        if(msg.obj instanceof AppdownloadBean){
-                            AppdownloadBean appdownloadBean = (AppdownloadBean) msg.obj;
-                            if(appdownloadBean == null){
-                                return;
-                            }
-                            appdownloadBean.setStaus(2);
-                            UtilParamsWebview.getInstance().returnBitMap(AppDownloadUtil.getInstance().accessInterfaceNetwork(mContext, AppDownloadUtil.URL, appdownloadBean));
-                        }
-
-
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                    break;
-                case 1://下载成功请求
-                    try {
-                        if(msg.obj instanceof AppdownloadBean){
-                            AppdownloadBean appdownloadBean = (AppdownloadBean) msg.obj;
-                            if(appdownloadBean == null){
-                                return;
-                            }
-                            appdownloadBean.setStaus(1);
-                            final HttpURLConnection connection = UtilParamsWebview.getInstance().returnBitMap(AppDownloadUtil.getInstance().accessInterfaceNetwork(mContext, AppDownloadUtil.URL, appdownloadBean));
-                            try {
-                                if(connection != null && connection.getResponseCode() == 200){
-                                    Message message = mHandler.obtainMessage();
-                                    message.what = 0;
-                                    message.obj = appdownloadBean;
-                                    mHandler.sendMessageDelayed(msg, RandomNum() * 1 * 1000);
-                                }
-                            } catch (IOException e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                    break;
-            }
-        }
-    };
-}

+ 8 - 4
app/src/main/java/com/kfzs/duanduan/utils/ApkUtils.java

@@ -32,22 +32,26 @@ import java.util.UUID;
  */
 public class ApkUtils {
 
-    private static Map<String, PackageInfo> installedApkContainer;
+    private Map<String, PackageInfo> installedApkContainer;
 
     private static ApkUtils apkUtil;
 
     public static ApkUtils getInstance() {
         if (null == apkUtil) {
             apkUtil = new ApkUtils();
-            setInstalledApkContainer();
+            apkUtil.setInstalledApkContainer();
         }
         return apkUtil;
 
     }
 
 
-    private static void setInstalledApkContainer() {
-        installedApkContainer = KFZSApp.getInstance().preloadPackagesInfo();
+    public void clear() {
+        installedApkContainer = null;
+
+    }
+    private void setInstalledApkContainer() {
+        installedApkContainer = KFZSApp.getInstance().loadPackagesInfoRealTime();
 
     }
 

+ 1 - 1
app/src/main/java/com/kfzs/duanduan/utils/GameStatusScanner.java

@@ -161,7 +161,7 @@ public abstract class GameStatusScanner {
                 final String gameName = v.getTag(KFProgressButton.TAG_5).toString();
                 final String iconUrl = v.getTag(KFProgressButton.TAG_6).toString();
                 int lResult = ApkUtils.getInstance().comparePkgVersionCode(packageName, versionCode);
-                boolean isPkgInstalled = ApkUtils.getInstance().isPkgInstalledRealTime(packageName);
+                boolean isPkgInstalled = ApkUtils.getInstance().isPkgInstalled(packageName);
                 if (isPkgInstalled && lResult == CompareResult.EQUALS) {//已经安装且版本相同
                     ApkUtils.openApplication(mContext, packageName);
                 } else if (!downloadTaskService.isDownloadExists(downloadUrl) && !KFZSApp.getInstance().mRealDownloadUrl.containsValue(downloadUrl)) {

+ 0 - 318
app/src/main/java/com/kfzs/duanduan/utils/dlg/UpdateUtils.java

@@ -1,318 +0,0 @@
-package com.kfzs.duanduan.utils.dlg;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.net.Uri;
-import android.os.Environment;
-import android.text.TextUtils;
-
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.security.cert.CertificateException;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.security.cert.X509Certificate;
-
-import static android.content.pm.PackageManager.GET_PERMISSIONS;
-
-/**
- * @ Created by Dlg
- * @ <p>TiTle:  UpdateUtils</p>
- * @ <p>Description:自己写更新工具吧,解决DownloadManager对HTTPS的开放支持不太友好的问题。</p>
- * @ <p>Description:写得很简单,路径等都没有开放接口,直接写死的</p>
- * @ date:  2017/10/26 10:27
- * @ QQ:    315096953
- */
-
-public class UpdateUtils {
-
-    public interface UpdateSetting {
-        /**
-         * 要强制更新时,回调此处
-         */
-        void updateForce();
-
-        /**
-         * 静默更新时,回调此处
-         */
-        void updateSilent();
-
-
-        /**
-         * 常规更新,回调此处
-         */
-        void updateNormal();
-
-        /**
-         * 如果不更新,回调此处
-         */
-        void updateNo();
-
-        /**
-         * 更新进度,回调此处
-         */
-        void udateProcess(int process);
-
-        /**
-         * 更新成功并完毕时,回调此处
-         */
-        void updateComplete();
-    }
-
-    private static UpdateUtils mUpdateUtils;
-    private UpdateSetting mUpdateSetting;
-    private boolean mIsNeedUpdate = false;//是否需要升级
-    private boolean mIsForceUpdate = false;//是否强制升级
-    private boolean mIsSlientUpdate = false;//是否静默升级
-    private static Context mContext;
-    private String mStrDownUrl;//apk下载地址
-    private int mIntProcess = 0;//当前下载进度
-    private long mIntFileLength = 0;//设置下载文件的大小,因为有的下载点不支持获取大小。
-
-    public static synchronized UpdateUtils getInstance(Context context) {
-        if (mUpdateUtils == null) {
-            mUpdateUtils = new UpdateUtils();
-        }
-        mContext = context;
-        return mUpdateUtils;
-    }
-
-    public UpdateUtils setmUpdateSetting(UpdateSetting mUpdateSetting) {
-        this.mUpdateSetting = mUpdateSetting;
-        return mUpdateUtils;
-    }
-
-    public UpdateUtils setmIsForceUpdate(boolean mIsForceUpdate) {
-        this.mIsForceUpdate = mIsForceUpdate;
-        return mUpdateUtils;
-    }
-
-    public UpdateUtils setmIntFileLength(long mIntFileLength) {
-        this.mIntFileLength = mIntFileLength;
-        return mUpdateUtils;
-    }
-
-    /**
-     * 设置是否静默升级。
-     *
-     * @param mIsSlientUpdate
-     */
-    public void setmIsSlientUpdate(boolean mIsSlientUpdate) {
-        this.mIsSlientUpdate = mIsSlientUpdate;
-    }
-
-    /**
-     * 主要暴露的更新接口
-     *
-     * @param packName    远端app的包名
-     * @param downUrl     远端app的下载地址
-     * @param versionCode 远端app的版本号
-     */
-    public void update(String packName, final String downUrl, int versionCode) {
-        if (TextUtils.isEmpty(downUrl) || !downUrl.toLowerCase().startsWith("http")) {
-            if (mUpdateSetting != null) {
-                mUpdateSetting.updateNo();
-            }
-            return;
-        }
-        checkUpdate(packName, versionCode);
-        callBack();
-        mStrDownUrl = downUrl;
-    }
-
-    /**
-     * 开始下载
-     *
-     * @return 是否启动此任务
-     */
-    public boolean startTask() {
-        if (mIsNeedUpdate) {
-            mIntProcess = 0;
-            new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        updateMain(mStrDownUrl);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            }).start();
-            return true;
-        }
-        return false;
-    }
-
-
-    /**
-     * 主要的更新函数
-     */
-    private void updateMain(String downUrl) throws Exception {
-        // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的
-        trustAllHosts();
-        URL url = new URL(downUrl);
-        InputStream is;
-        if (downUrl.toLowerCase().startsWith("https")) {
-            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
-            conn.setHostnameVerifier(new HostnameVerifier() {
-                public boolean verify(String hostname, SSLSession session) {
-                    return true;
-                }
-            });
-            conn.setInstanceFollowRedirects(true);
-            conn.setConnectTimeout(5000);
-            conn.connect();
-            if (!TextUtils.isEmpty(conn.getHeaderField("Location"))) {
-                updateMain(conn.getHeaderField("Location"));
-                return;
-            }
-
-            // 获取到文件的大小
-            if (mIntFileLength < 1)
-                mIntFileLength = conn.getContentLength();
-            is = conn.getInputStream();
-        } else {
-            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-            conn.setConnectTimeout(5000);
-            conn.setInstanceFollowRedirects(true);
-            conn.connect();
-
-            if (!TextUtils.isEmpty(conn.getHeaderField("Location"))) {
-                updateMain(conn.getHeaderField("Location"));
-                return;
-            }
-            // 获取到文件的大小
-            if (mIntFileLength < 1)
-                mIntFileLength = conn.getContentLength();
-            is = conn.getInputStream();
-        }
-
-
-        String fileName = mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/haowanUpdate.apk";
-        File file = new File(fileName);
-        // 目录不存在创建目录
-        if (file.exists()) {
-            file.delete();
-        }
-        if (!file.getParentFile().exists())
-            file.getParentFile().mkdirs();
-        FileOutputStream fos = new FileOutputStream(file);
-        BufferedInputStream bis = new BufferedInputStream(is);
-        byte[] buffer = new byte[1024];
-        int len;
-        int total = 0;
-        while ((len = bis.read(buffer)) != -1) {
-            fos.write(buffer, 0, len);
-            total += len;
-            // 获取当前下载量
-            mIntProcess = (int) (100 * total / mIntFileLength);
-            mUpdateSetting.udateProcess(mIntProcess);
-        }
-        mIntProcess = 100;
-        mUpdateSetting.udateProcess(mIntProcess);
-        fos.close();
-        bis.close();
-        is.close();
-        installApk(mContext, file);
-    }
-
-    private static void trustAllHosts() {
-
-        // Create a trust manager that does not validate certificate chains
-        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
-
-            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
-                return new java.security.cert.X509Certificate[]{};
-            }
-
-            public void checkClientTrusted(X509Certificate[] chain, String authType) {
-
-            }
-
-            public void checkServerTrusted(X509Certificate[] chain, String authType) {
-
-            }
-
-            @Override
-            public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
-
-            }
-
-            @Override
-            public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
-
-            }
-        }};
-
-        // Install the all-trusting trust manager
-        try {
-            SSLContext sc = SSLContext.getInstance("TLS");
-            sc.init(null, trustAllCerts, new java.security.SecureRandom());
-            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public int getmIntProcess() {
-        return mIntProcess;
-    }
-
-    /**
-     * 安装apk
-     */
-    private void installApk(Context mContext, File file) {
-        Uri fileUri = Uri.fromFile(file);
-        Intent it = new Intent();
-        it.setAction(Intent.ACTION_VIEW);
-        it.setDataAndType(fileUri, "application/vnd.android.package-archive");
-        it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//有时候时在service里,用这个flag就行。
-        mContext.startActivity(it);
-    }
-
-    /**
-     * 这里执行传入回调
-     */
-    private void callBack() {
-        if (mIsNeedUpdate) {
-            if (mIsSlientUpdate) {
-                mUpdateSetting.updateSilent();
-            } else if (mIsForceUpdate) {
-                mUpdateSetting.updateForce();
-            } else {
-                mUpdateSetting.updateNormal();
-            }
-        } else {
-            mUpdateSetting.updateNo();
-        }
-    }
-
-    /**
-     * 检查是否需要更新
-     *
-     * @return
-     */
-    private void checkUpdate(String packName, int versionCode) {
-        try {
-            PackageInfo e = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), GET_PERMISSIONS);
-            if (TextUtils.isEmpty(packName)) {
-                this.mIsNeedUpdate = e.versionCode < versionCode;
-            } else {
-                this.mIsNeedUpdate = e.packageName.equals(packName) && e.versionCode < versionCode;
-            }
-        } catch (Exception var2) {
-            (new NullPointerException("包名信息不存在:" + mContext.getPackageName())).printStackTrace();
-        }
-    }
-}

+ 0 - 229
app/src/main/java/com/kfzs/duanduan/view/DialogUpdateFragment.java

@@ -1,229 +0,0 @@
-package com.kfzs.duanduan.view;
-
-import android.app.Dialog;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.graphics.Point;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.NotificationCompat;
-import android.text.Html;
-import android.text.method.ScrollingMovementMethod;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import com.kfzs.duanduan.KFZSApp;
-import com.sheep.jiuyan.samllsheep.R;
-import com.kfzs.duanduan.utils.dlg.HandlerUtils;
-import com.kfzs.duanduan.utils.dlg.UpdateUtils;
-import com.kfzs.duanduan.utils.dlg.ViewFindUtils;
-
-/**
- * @ Created by Dlg
- * @ <p>TiTle:  DialogUpdateFragment</p>
- * @ <p>Description:</p>
- * @ date:  2017/7/13 17:50
- * @ QQ:    315096953
- */
-
-public class DialogUpdateFragment extends DialogFragment {
-
-    private String mStrUpdateDesc;//新版本更新的描述
-    private String mStrUpdateTime;//新版本更新时间
-    private String mStrUpdateVersion;//当前版本号
-    private String mStrUpdateSize;//安装包大小
-
-    private boolean mIsForceUpdate;//是否为强制更新
-    private ProgressBar mPro;//进度条
-    private HandlerUtils mHandlerUtils;//循环更新进度条
-    private CancelCallback mCancel;
-    private final static int NOTIFY_ID = 2343434;
-    private int mIntLastProcess = 0;//上次下载百分比
-    private NotificationManager mNotify;
-    private NotificationCompat.Builder mNotifyBuilder;
-
-
-    @Nullable
-    @Override
-    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        //getDialog().getWindow().setBackgroundDrawableResource(R.drawable.sp_appointment_bg);
-        return super.onCreateView(inflater, container, savedInstanceState);
-    }
-
-    public DialogUpdateFragment init(boolean isForceUpdate, String strUpdateDesc,
-                                     String update_version, String update_time,
-                                     String size, CancelCallback cancel) {
-        mIsForceUpdate = isForceUpdate;
-        mStrUpdateDesc = strUpdateDesc;
-        mStrUpdateTime = update_time;
-        mStrUpdateSize = size;
-        mStrUpdateVersion = update_version;
-        mCancel = cancel;
-        return this;
-    }
-
-
-    @NonNull
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        Dialog dialog1 = new Dialog(getActivity(), R.style.PanleDialog);
-        dialog1.setContentView(getDiagView());
-        dialog1.setCancelable(false);
-        dialog1.setOnKeyListener(new DialogInterface.OnKeyListener() {
-            @Override
-            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-                return keyCode == KeyEvent.KEYCODE_BACK;
-            }
-        });
-        dialog1.setCanceledOnTouchOutside(false);
-        //禁止点空白地址关闭窗口
-        return dialog1;
-    }
-
-    @Override
-    public void onDestroy() {
-        closeDownTask();
-        super.onDestroy();
-    }
-
-    /**
-     * 关闭下载
-     */
-    private void closeDownTask() {
-        if (mHandlerUtils != null) {
-            mHandlerUtils.setmIsBreak(true);
-        }
-        if (mNotify != null) {
-            mNotify.cancel(NOTIFY_ID);
-        }
-    }
-
-    /**
-     * 初始化处理对话框组件值
-     *
-     * @return 返回对话框界面
-     */
-    private View getDiagView() {
-        View view = LayoutInflater.from(getActivity())
-                .inflate(R.layout.diag_show_update, null);
-        mPro = ViewFindUtils.find(view, R.id.pro_diag_show_update);
-        ViewFindUtils.find(view, R.id.app_update_version, TextView.class).setText("版本:" + mStrUpdateVersion);
-        ViewFindUtils.find(view, R.id.app_update_time, TextView.class).setText("发布时间: " + mStrUpdateTime);
-        ViewFindUtils.find(view, R.id.app_update_size, TextView.class).setText("大小: " + mStrUpdateSize + "M");
-        ViewFindUtils.find(view, R.id.show_update_info, TextView.class).setText(Html.fromHtml(mStrUpdateDesc));
-        ViewFindUtils.find(view, R.id.show_update_info, TextView.class)
-                .setMovementMethod(new ScrollingMovementMethod());//让TextView可以滚动
-        ViewFindUtils.find(view, R.id.btn_diag_update_ok).setOnClickListener(clsMain);
-        ViewFindUtils.find(view, R.id.btn_diag_update_cancel).setOnClickListener(clsMain);
-       /* if (!Updater.getInstance().isNeedsDownRemote()) {
-            ViewFindUtils.find(view, R.id.btn_diag_update_ok, Button.class).setText("免流量安装");
-            ViewFindUtils.find(view, R.id.btn_diag_update_cancel).setVisibility(View.GONE);
-        }*/
-        return view;
-    }
-
-    //点击取消回调
-    public interface CancelCallback {
-
-        void onCancel();
-    }
-
-
-    /**
-     * 设置对话框的宽和高,此方案小米等手机可能是不兼容的。
-     */
-    @Override
-    public void onResume() {
-        super.onResume();
-        Window dialogWindow = getDialog().getWindow();
-        Point point = new Point();
-        getActivity().getWindowManager().getDefaultDisplay().getSize(point);
-        WindowManager.LayoutParams p = dialogWindow.getAttributes();
-        //p.height = (int) (point.y * (mIsUpdateDiag ? 0.65 : 0.4));
-        p.width = (int) (point.x * 0.7);
-        dialogWindow.setAttributes(p);
-    }
-
-
-    /**
-     * 对话框的监听
-     */
-    private View.OnClickListener clsMain = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case R.id.btn_diag_update_ok:
-                    updateSubmit(v);
-                    break;
-                case R.id.btn_diag_update_cancel:
-                    if (mIsForceUpdate) {
-                        KFZSApp.getInstance().quit();
-                    } else {
-                        DialogUpdateFragment.this.dismiss();
-                        if (mCancel != null)
-                            mCancel.onCancel();
-                    }
-                    break;
-                case R.id.btn_diag_show_appointment:
-                    DialogUpdateFragment.this.dismiss();
-                    break;
-                default:
-                    break;
-            }
-        }
-    };
-
-
-    /**
-     * 点更新的操作
-     *
-     * @param v 更新按钮
-     */
-    private void updateSubmit(View v) {
-        if (!UpdateUtils.getInstance(getActivity()).startTask()) {//启动下载
-            return;
-        }
-        ((View) v.getParent()).setVisibility(View.GONE);//隐藏按钮
-        mPro.setVisibility(View.VISIBLE);//显示进度条
-        if (mHandlerUtils == null) {
-            mHandlerUtils = new HandlerUtils();
-        }
-        mHandlerUtils.taskPostInUi(new Runnable() {
-            @Override
-            public void run() {
-                mPro.setProgress(UpdateUtils.getInstance(getActivity()).getmIntProcess());
-                updateNotify(UpdateUtils.getInstance(getActivity()).getmIntProcess());
-            }
-        }, 300);
-    }
-
-    private void updateNotify(int process) {
-        if (mIntLastProcess == process && mNotify != null) {
-            return;
-        }
-        mIntLastProcess = process;
-        if (mNotify == null) {
-            mNotify = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
-            mNotifyBuilder = new NotificationCompat.Builder(getActivity());
-            mNotifyBuilder.setSmallIcon(R.mipmap.ic_launcher);
-            mNotifyBuilder.setContentTitle(getString(R.string.app_name) + "下载中");
-            mNotifyBuilder.setAutoCancel(false);
-            mNotifyBuilder.setContentText("正在下载中...");
-            mNotifyBuilder.setProgress(100, 0, false);
-            mNotify.notify(NOTIFY_ID, mNotifyBuilder.build());
-        }
-        mNotifyBuilder.setContentText("正在下载中...(" + mIntLastProcess + "%)");
-        mNotifyBuilder.setProgress(100, process, false);
-        mNotify.notify(NOTIFY_ID, mNotifyBuilder.build());
-    }
-
-}

+ 1 - 1
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/PackageUtil.java

@@ -93,7 +93,7 @@ public class PackageUtil {
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         try{
-            if (Build.VERSION.SDK_INT >= 24) { //判读版本是否在7.0以上
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判读版本是否在7.0以上
                 Uri apkUri = FileProvider.getUriForFile(context, SheepApp.mContext.getPackageName() + ".fileprovider", file);
                 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                 intent.setDataAndType(apkUri, "application/vnd.android.package-archive");

+ 2 - 4
gradle.properties

@@ -17,10 +17,8 @@
 # org.gradle.parallel=true
 #android.injected.build.model.only.versioned = 3
 
-#VERSION_NAME=1.1.2
-#VERSION_CODE=101002
-VERSION_NAME=2.0.0
-VERSION_CODE=200000
+VERSION_NAME=2.0.1
+VERSION_CODE=200001
 ANDROID_COMPILE_SDK_VERSION=27
 ANDROID_BUILD_TOOLS_VERSION=27.0.2
 ANDROID_MIN_SDK_VERSION=18