Resumen de actualización automática de la aplicación de Android (adaptado a 9-0), habla sobre el principio del mecanismo de mensajes de Android

Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.REQUEST_INSTALL_PACKAGES})
protected void checkUpdate() { showLoadingDialog("Buscando actualizaciones..."); version = AppUpdateUtil.getAppVersionCode(this);//Comprobar el número de versión actual // Llamar método,, la implementación específica de la interfaz, recibe los parámetros pasados ​​y luego ajusta tu propio método, requestAppUpdate(version, new DataRequestListener() { @Override public void success(UpdateAppBean data) { // Cuando el json devuelto, getStatus es 0, vaya a descargar el archivo apk, este es el método para descargar el archivo apk updateApp(data.getData().getApk_url()); }








@Override
public void fail(String msg) { // Devolvió json, cuando getStatus es 1, pregunta: "¡Ya está la última versión!" SToast(msg); dismissLoadingDialog(); } }); }





// Verifique el número de versión, la primera solicitud (publicación), UpdateAppBean genera
una solicitud vacía privadaAppUpdate (versión int, oyente final de DataRequestListener) { OkGo.post (Const.HOST_URL + Const.UPDATEAPP).params ("versión", versión ).execute(new StringCallback() { @Override public void onSuccess(respuesta de respuesta) { Gson gson = new Gson(); UpdateAppBean updateAppBean = gson.fromJson(response.body(), UpdateAppBean.class); if ( updateAppBean.getStatus () == 0) { listener.success(updateAppBean); } else { listener.fail(updateAppBean.getMsg()); } }










@Override
public void onError(Response response) { listener.fail("Error en la conexión del servidor"); dismissLoadingDialog(); } }); }




//Si hay una nueva versión, solicite que haya una nueva versión y luego descargue el archivo apk
private void updateApp(String apk_url) { dismissLoadingDialog(); DialogUtils.getInstance().showDialog(this, "Nueva versión encontrada, ¿Quieres descargar la actualización?" , new DialogUtils.DialogListener() { @Override public void positiveButton() { downloadApp(apk_url); } }); }








// Descargue el archivo apk y salte (segunda solicitud, obtenga)
descarga privada de vacío App (String apk_url) { OkGo.get (apk_url) . etiqueta (este) . { String filePath = response.body().getAbsolutePath(); Intent intent = IntentUtil.getInstallAppIntent(mContext, filePath); // Probado aquí debe usar startactivity, no stratactivityforresult mContext.startActivity(intent); dismissLoadingDialog() ; mDownloadDialog.dismiss (); mDownloadDialog=null; }










@Override
public void downloadProgress(Progress progreso) { // showDownloadDialog(); // mProgress.setProgress((int) (progress.fraction * 100)); if (mDownloadDialog == null) { // Construya el cuadro de diálogo de descarga de software AlertDialog .Builder builder = new AlertDialog.Builder(mContext); builder.setTitle("Updating"); // Agrega una barra de progreso al diálogo de descarga final LayoutInflater inflater = LayoutInflater.from(mContext); View v = inflater.inflate( R .layout.item_progress, null); mProgress = (ProgressBar) v.findViewById(R.id.update_progress); builder.setView(v); mDownloadDialog = builder.create(); mDownloadDialog.setCancelable(false); mDownloadDialog.show ( );














}
mProgress.setProgress((int) (progress.fraction * 100));
}
});
}

2.2 Oyente de solicitud de datos:

interfaz pública DataRequestListener { //Solicitud exitosa void success(T data); //Solicitud fallida void fail(String msg); }




La siguiente es la clase de herramienta, de github, referencia, https://github.com/vondear/RxTool

2.3 Utilidad de actualización de aplicaciones:

/**
* Obtener el código de la versión de la aplicación
*
* @param context context
* @return Código de la versión de la aplicación
*/
public static int getAppVersionCode(Context context) { return getAppVersionCode(context, context.getPackageName()); }

2.4 IntenciónUtil:

clase pública IntentUtil {

/**
* Obtener la intención de instalar la aplicación (compatible con 7.0)
*
* @param context
* @param filePath
* @return
*/
public static Intent getInstallAppIntent(Context context, String filePath) { //Ruta local del archivo apk File apkfile = new File(filePath); if (!apkfile.exists()) { return null; } Intent intent = new Intent(Intent.ACTION_VIEW); Uri contentUri = FileUtil.getUriForFile(context, apkfile); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); si (Compilación.VERSIÓN.SDK_INT >= Compilación.VERSIÓN_CÓDIGOS.N) {








compartir aprendizaje

En la era actual de intercambio de información, se pueden encontrar muchos recursos en Internet, solo depende de si está dispuesto a encontrarlos o cómo encontrarlos, ¿verdad?

No es que muchos amigos no tengan información, la mayoría tienen decenas o centenas de G, pero están desorganizados, no sé leerlos, ni siquiera los olvido después de leerlos.

Si sientes que la información que encuentras en Internet es muy desordenada y poco sistemática, también compartiré contigo un conjunto, es más sistemático y generalmente lo estudio yo mismo.

Las últimas decenas de miles de páginas de preguntas de la entrevista de Dachang en 2020

Siete módulos de materiales de aprendizaje: como desarrollo de módulos NDK, arquitectura de marco de Android...

Solo el aprendizaje sistemático y direccional puede mejorar rápidamente las habilidades de uno dentro de un período de tiempo.

Este sistema de notas de estudio es adecuado para la multitud:
primero, el conocimiento del aprendizaje está relativamente fragmentado y no hay una ruta de aprendizaje razonable ni una dirección avanzada.
En segundo lugar, después de varios años de desarrollo, no sé cómo avanzar más y estoy bastante confundido.
En tercer lugar, a la edad adecuada, no sé cómo desarrollarme en el futuro, si transformar la gestión o fortalecer la investigación técnica. Si lo necesita, solo tengo una razón aquí, ¡no venga a buscarlo! ¡Tal vez pueda cambiar tu estado actual!

Este sistema de notas de estudio es adecuado para la multitud:
primero, el conocimiento del aprendizaje está relativamente fragmentado y no hay una ruta de aprendizaje razonable ni una dirección avanzada.
En segundo lugar, después de varios años de desarrollo, no sé cómo avanzar más y estoy bastante confundido.
En tercer lugar, a la edad adecuada, no sé cómo desarrollarme en el futuro, si transformar la gestión o fortalecer la investigación técnica. Si lo necesita, solo tengo una razón aquí, ¡no venga a buscarlo! ¡Tal vez pueda cambiar tu estado actual!
Debido al gran contenido del artículo y al espacio limitado, parte del contenido que no se muestra se mostrará en forma de capturas de pantalla. Si necesita obtener un documento completo, haga clic en mi GitHub para obtenerlo de forma gratuita.

Supongo que te gusta

Origin blog.csdn.net/m0_66264630/article/details/123002113
Recomendado
Clasificación