android 에서 app 인 스 턴 스 코드 를 강제로 업데이트 합 니 다.

세 번 째 방법 을 추천 합 니 다.간단 하고 빠 르 며 끊 기지 않 습 니 다.
제1 종:jjdxmupdate
GitHub 주소:jjdxmashl/jjdxm_update
효과 그림:
즉시 업 데 이 트 를 누 르 면 프로그램 은 배경 에서 다운로드 되 고 알림 표시 줄 에 다운로드 진도 가 있 습 니 다.이 럴 때 핸드폰 시스템 이 끊 겨 서 앱 을 다운로드 해서 그런 가 봐 요.다운로드 완료 후 팝 업 설치 인터페이스
这里写图片描述  
这里写图片描述  
这里写图片描述  
这里写图片描述
프로필:
이것 은 대신 jjdxmashl 의 오픈 소스 프로젝트 입 니 다.다운로드 주 소 는 위 에 있 습 니 다.버 전 업데이트,수 동 업데이트,침묵 업데이트,자동 업데이트 등 4 가지 상황 이 있 습 니 다.응용 내 업데이트,구현 클래스 는 동맹 자동 업데이트 sdk 모드 입 니 다.사용자 가 사용 하기 전에 자신의 서버 업데이트 검사 인터페이스 만 설정 하면 됩 니 다(인터페이스 필요).또한 하나의 인 터 페 이 스 를 온라인 매개 변수 설정 으로 확장 하여 실현 할 수 있 습 니 다.아래 의 4 가지 2 가지 새로운 방식 과 강제 업데이트 조합 사용 여 부 를 실현 할 수 있 습 니 다.get,post 방식 으로 네트워크 를 요청 할 수 있 습 니 다.기본 값 은 get 요청 입 니 다.
4 가지 업데이트 검사 유형
수 동 업데이트:수 동 검색 업데이트(모든 네트워크 유형 환경 검 측 및 알림 은 주로 클릭 검 측 사용)4.567917.자동 업데이트:자동 검색 업데이트(모든 네트워크 유형 환경 검 측 및 알림)와 이 파이 자동 검색 업데이트(와 이 파이 네트워크 유형 환경 검색 및 알림 만 있 음)
  • 침묵 업데이트:와 이 파이 만 자동 으로 다운로드 감지(와 이 파이 네트워크 유형 환경 검 측,다운로드 완료 만 알림)
  • 2 가지 강제 업데이트 방식
  • 업데이트 검사 가 돌아 온 후 update.setForce(true)를 직접 설정 합 니 다
  • 온라인 매개 변수 에 맞 춰 사용 하고 온라인 매개 변 수 를 통 해 되 돌아 오 는 데이터 설정 UpdateHelper.getInstance().setForced(true)
  • 상기 4 에서 업데이트 검 사 는 2 가지 강제 업데이트 와 결합 하여 적용 된다.이전 app 버 전에 중대 한 구멍 이 있 고 온라인 매개 변 수 를 수정 하여 모든 app 사용 자 를 통일 적 으로 제어 하 며 업데이트 하지 않 으 면 app 을 사용 할 수 없다.
    주요 원리:서버 에서 매개 변수 값 을 수정 하고 app 에서 가 져 온 후에 판단 합 니 다.강제 업데이트 라면 응용 프로그램 을 열 때 새로운 버 전의 app 이 있 음 을 알려 줍 니 다.업데이트 가 완료 되 어야 이 app 을 사용 할 수 있 습 니 다.업데이트 가 완료 되면 알림 상자 가 사라 지지 않 고 back 키 를 누 르 면 응용 프로그램 을 종료 합 니 다.
    강제 업데이트 사용
    강제 업데이트 상황 을 보 여 드 리 겠 습 니 다.
    这里写图片描述
    Step 1:의존 라 이브 러 리 추가
    주 프로그램의 build.gradle 파일 의 dependencies 속성 에 의존 라 이브 러 리 추가
    
    dependencies {
      ...
      compile 'com.dou361.update:jjdxm-update:1.0.5'
      compile 'com.dou361.download:jjdxm-download:1.0.3'
      ...
    }
    단계 2:인터페이스 매개 변수 업데이트 정 보 를 설정 하고 매개 변수 인터페이스 와 분석 매개 변 수 를 초기 화 합 니 다.
    온라인 업데이트 인터페이스 와 이 인터페이스 에서 데 이 터 를 되 돌려 주 는 분석 을 설정 해 야 합 니 다.
    선택 할 수 있 는 것 은 온라인 매개 변수 인터페이스 와 이 인터페이스 가 데 이 터 를 되 돌려 주 는 분석(일반적으로 사용 되 지 않 음)입 니 다.온라인 매개 변 수 는 0 개 또는 여러 개의 서로 다른 의미 의 매개 변 수 를 무 작위 로 정의 하여 온라인 에서 apk 의 일부 특성 을 수정 할 수 있 습 니 다.
    Step 2-1 자동 업데이트 설정 클래스 만 들 기
    방법+매개 변수
    속뜻
    setCheckUrl(checkUrl)
    checkUrl:app 인터페이스 업데이트
    setCheckJsonParser(new ParseData() {return update;}
    Update 형식 만 되 돌 릴 수 있 습 니 다.해석 은 마음대로 할 수 있 지만 분 석 된 데 이 터 를 update 에 할당 하고 update 를 되 돌려 주 십시오.
    
    public class UpdateConfig {
      private static final String TAG = "UpdateConfig";
      private static String checkUrl = "http://192.168.1.11:8080/cmcc/jsoninfo";
    
      public static void init(Context context) {
        UpdateHelper.init(context);
        UpdateHelper.getInstance()
            .setMethod(RequestType.get)//   :    ,   get  
            .setCheckUrl(checkUrl)//   :      ,         setCheckUrl(checkUrl, params)
            .setDialogLayout(R.layout.custom_update_dialog)//      dialog
            .setCheckJsonParser(new ParseData() {//   :              response 。   Update  。        
              @Override
              public Update parse(String response) {
                Log.d(TAG, "response=" + response);
                //  json  
                Gson gson = new Gson();
                UpDateBean upDateBean = gson.fromJson(response, UpDateBean.class);
                UpDateBean.DataBean data = upDateBean.getData();
    
                Update update = new Update();
                update.setForce(data.isForce());
                update.setApkSize(data.getV_size());
                update.setUpdateContent(data.getUpdate_content());
                update.setUpdateUrl(data.getDownload_url());
                update.setVersionCode(Integer.parseInt(data.getV_code()));
                update.setVersionName(data.getV_name());
                return update;//    Update  ,    ,         javaBean     update,   update  
              }
            });
      }
    }
    
    checkUrl:tomcat 에 넣 었 어 요.

    private static String checkUrl = "http://192.168.1.11:8080/cmcc/jsoninfo";
    jsoninfo:
    
    {
      "code": 0,
      "data": {
        "download_url": "http://192.168.1.11:8080/cmcc/demo.apk ",
        "force": false,
        "update_content": "      ",
        "v_code": 10,
        "v_name": "v1.1",
        "v_sha1": "7db76e18ac92bb29ff0ef012abfe178a78477534",
        "v_size": 12365909
      }
    }
    Step 2-2 업데이트 인터페이스 에서 돌아 오 는 데 이 터 를 분석 합 니 다.
    위 에 제 가 사용 하 는 것 은 Gson.jar 이기 때문에 module 의 build.gradle 에 gs on 을 추가 해 야 합 니 다.
    
    dependencies {
      ...
      compile 'com.dou361.update:jjdxm-update:1.0.5'
      compile 'com.dou361.download:jjdxm-download:1.0.3'
      compile 'com.google.code.gson:gson:2.7'
      ...
    }
    javaBean 클래스 UpDateBean,이 종 류 를 직접 만 듭 니 다.오른쪽 단 추 를 누 르 면 Generate―>Gson Format―>json 데 이 터 를 편집 상자 에 복사 합 니 다.>OK―>이 매개 변 수 를 선택 하면 set()+get()방법 을 생 성 할 수 있 습 니 다.
    
    public class UpDateBean {
    
      /**
       * code : 0
       * data : {"download_url":"http://115.159.45.251/software/feibei_live1.0.0.16070810_zs.apk ","force":false,"update_content":"      ","v_code":"10","v_name":"v1.0.0.16070810","v_sha1":"7db76e18ac92bb29ff0ef012abfe178a78477534","v_size":12365909}
       */
    
      private int code;
      /**
       * download_url : http://115.159.45.251/software/feibei_live1.0.0.16070810_zs.apk
       * force : false
       * update_content :       
       * v_code : 10
       * v_name : v1.0.0.16070810
       * v_sha1 : 7db76e18ac92bb29ff0ef012abfe178a78477534
       * v_size : 12365909
       */
    
      private DataBean data;
    
      public int getCode() {
        return code;
      }
    
      public void setCode(int code) {
        this.code = code;
      }
    
      public DataBean getData() {
        return data;
      }
    
      public void setData(DataBean data) {
        this.data = data;
      }
    
      public static class DataBean {
        private String download_url;
        private boolean force;
        private String update_content;
        private String v_code;
        private String v_name;
        private String v_sha1;
        private int v_size;
    
        public String getDownload_url() {
          return download_url;
        }
    
        public void setDownload_url(String download_url) {
          this.download_url = download_url;
        }
    
        public boolean isForce() {
          return force;
        }
    
        public void setForce(boolean force) {
          this.force = force;
        }
    
        public String getUpdate_content() {
          return update_content;
        }
    
        public void setUpdate_content(String update_content) {
          this.update_content = update_content;
        }
    
        public String getV_code() {
          return v_code;
        }
    
        public void setV_code(String v_code) {
          this.v_code = v_code;
        }
    
        public String getV_name() {
          return v_name;
        }
    
        public void setV_name(String v_name) {
          this.v_name = v_name;
        }
    
        public String getV_sha1() {
          return v_sha1;
        }
    
        public void setV_sha1(String v_sha1) {
          this.v_sha1 = v_sha1;
        }
    
        public int getV_size() {
          return v_size;
        }
    
        public void setV_size(int v_size) {
          this.v_size = v_size;
        }
      }
    }
    
    Step 3:응용 프로그램 에서 oncreate()방법 으로 호출
    
    UpdateConfig.init(this);
    Step 4:MainActivity 의 onCrete()에서 업데이트 확인
    
    UpdateHelper.getInstance()
        .setUpdateType(UpdateType.autoupdate)//      
        .setForceListener(new ForceListener() {//      ,true   app
          @Override
          public void onUserCancel(boolean force) {
            if (force) {
              finish();
            }
          }
        })
        .check(MainActivity.this);
    
    
    원본 다운로드:UpDateDemo2
    두 번 째:VersionCode 판단,xUtils 다운로드 실현
    versionCode 에 따라 업데이트 dialog 를 팝 업 할 지 여 부 를 판단 합 니 다.업데이트 가 필요 하 다 면 사용 자 는"확인"을 누 르 고 xUtils 를 이용 하여 다운로드 할 수 있 습 니 다.progressDialog 는 다운로드 진 도 를 표시 합 니 다.다운로드 가 완료 되면 설치 여 부 를 팝 업 합 니 다.app 설치 여부:종료(MainActivity.this.finish())입 니 다.
    효과 도
    这里写图片描述
    단계 1:인터페이스 업데이트 요청,versionCode 에 따라 업데이트 여 부 를 판단 합 니 다.
    
    //        
    PackageManager packageManager = getPackageManager();
    try {
      packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
    } catch (NameNotFoundException e) {
      e.printStackTrace();
    } finally {
      nativeVversionCode = packageInfo.versionCode;
    }
    
    //         
    HttpUtils http = new HttpUtils();
    String url = "http://192.168.8.101:8080/QQ/jsoninfo";
    http.send(HttpMethod.POST, url, new RequestCallBack<String>() {
    
      @Override
      public void onFailure(HttpException exception, String msg) {
        ToastUtil.showShortToast(getBaseContext(), "         ,     ,
    App5 "); handler.sendEmptyMessageDelayed(123, 5000); } @Override public void onSuccess(ResponseInfo<String> respinseInfo) { try { JSONObject obj = new JSONObject(respinseInfo.result); remoteVersionCode = obj.getInt("versioncode"); if (remoteVersionCode > nativeVversionCode) { ToastUtil.showLongToast(getBaseContext(), " "); downLoadApp(); } } catch (JSONException e) { e.printStackTrace(); } } }); private Handler handler = new Handler(){ public void handleMessage(Message msg) { if (msg.what == 123) { MainActivity.this.finish(); } }; };
    2 단계:최신 버 전 다운로드
    
    protected void downLoadApp() {
      target = Environment.getExternalStorageDirectory().getAbsolutePath() + "/QQ.apk";
      String url = "http://192.168.8.101:8080/QQ/QQ.apk";
      HttpUtils http = new HttpUtils();
      http.download(url, target, new RequestCallBack<File>() {
    
        @Override
        public void onFailure(HttpException exception, String msg) {
          ToastUtil.showShortToast(getBaseContext(), "    ");
        }
    
        @Override
        public void onSuccess(ResponseInfo<File> responseInfo) {
          dialog.dismiss();
          ToastUtil.showShortToast(getBaseContext(), "    ");
          //   apk
          installApk();
        }
    
        @Override
        public void onLoading(long total, long current, boolean isUploading) {
          super.onLoading(total, current, isUploading);
          initProgressDialog(total,current);
        }
      });
    }
    
    
    3 단계:설치 APK
    
    protected void installApk() {
      new AlertDialog.Builder(MainActivity.this)
        .setTitle("    ")
        .setMessage("         ...")
        .setCancelable(false)
        .setPositiveButton("  ", new DialogInterface.OnClickListener() {
    
          @Override
          public void onClick(DialogInterface dialog, int which) {
            //  app
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
            Uri data = Uri.parse("file://" + target);
            intent.setDataAndType(data, "application/vnd.android.package-archive");
            startActivity(intent);
            MainActivity.this.finish();
          }
        })
        .setNegativeButton("  ", new DialogInterface.OnClickListener() {
    
          @Override
          public void onClick(DialogInterface dialog, int which) {
            MainActivity.this.finish();
          }
        }).show();
    }
    
    
    Step 4:시스템 설치 인터페이스 호출
    
    protected void initProgressDialog(long total, long current) {
        dialog.setTitle("  app");//    
        dialog.setMessage("   : "+ remoteVersionCode);//  dialog  
        dialog.setIcon(R.drawable.ic_launcher);//    ,  Title  
        dialog.setCancelable(false);//         
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//       ,STYLE_SPINNER:     
        dialog.setMax((int) total);//   
        dialog.setProgress((int) current);
        dialog.show();
      }
    
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기