android 에서 app 인 스 턴 스 코드 를 강제로 업데이트 합 니 다.
제1 종:jjdxmupdate
GitHub 주소:jjdxmashl/jjdxm_update
효과 그림:
즉시 업 데 이 트 를 누 르 면 프로그램 은 배경 에서 다운로드 되 고 알림 표시 줄 에 다운로드 진도 가 있 습 니 다.이 럴 때 핸드폰 시스템 이 끊 겨 서 앱 을 다운로드 해서 그런 가 봐 요.다운로드 완료 후 팝 업 설치 인터페이스
프로필:
이것 은 대신 jjdxmashl 의 오픈 소스 프로젝트 입 니 다.다운로드 주 소 는 위 에 있 습 니 다.버 전 업데이트,수 동 업데이트,침묵 업데이트,자동 업데이트 등 4 가지 상황 이 있 습 니 다.응용 내 업데이트,구현 클래스 는 동맹 자동 업데이트 sdk 모드 입 니 다.사용자 가 사용 하기 전에 자신의 서버 업데이트 검사 인터페이스 만 설정 하면 됩 니 다(인터페이스 필요).또한 하나의 인 터 페 이 스 를 온라인 매개 변수 설정 으로 확장 하여 실현 할 수 있 습 니 다.아래 의 4 가지 2 가지 새로운 방식 과 강제 업데이트 조합 사용 여 부 를 실현 할 수 있 습 니 다.get,post 방식 으로 네트워크 를 요청 할 수 있 습 니 다.기본 값 은 get 요청 입 니 다.
4 가지 업데이트 검사 유형
수 동 업데이트:수 동 검색 업데이트(모든 네트워크 유형 환경 검 측 및 알림 은 주로 클릭 검 측 사용)4.567917.자동 업데이트:자동 검색 업데이트(모든 네트워크 유형 환경 검 측 및 알림)와 이 파이 자동 검색 업데이트(와 이 파이 네트워크 유형 환경 검색 및 알림 만 있 음)
주요 원리:서버 에서 매개 변수 값 을 수정 하고 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();
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.