日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android在线更新安装包,Android在线更新下载方案

發(fā)布時間:2024/9/27 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android在线更新安装包,Android在线更新下载方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的

App的在線更新是每一個項目必有的功能,但在過程當(dāng)中會遇到一些問題,在此記錄下心得。

步驟

1、將最新版本號和本地版本號進(jìn)行對比;

2、如需更新,則彈出更新提示對話框;

3、下載更新APK文件,并顯示進(jìn)度條和通知欄;

4、安裝APK

具體流程

一、通過網(wǎng)絡(luò)接口獲取到線上最新版本號,將最新版本號和本地版本號進(jìn)行對比

首先從網(wǎng)絡(luò)回調(diào)接口中獲取最新版本號,再將本地版本號與最新版本號進(jìn)行對比,如果需要更新則彈出對話框

/**

* 更新提示對話框

*/

public void appUpdateDialog(final Context context, final UpdateCheckRetBean bean) {

new MaterialDialog.Builder(context)

.title("金米米") //標(biāo)題內(nèi)容

.titleColor(Color.parseColor("#FFC736")) //標(biāo)題顏色

.iconRes(R.drawable.ic_logo_share) //圖標(biāo)

.content(bean.getDetail()) //內(nèi)容

.positiveText("立即更新") //選擇更新

.canceledOnTouchOutside(false) //觸摸窗口邊界以外是否關(guān)閉窗口,設(shè)置 false

.onPositive(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

dialog.dismiss();

downloadDialog(context, bean.getUrl()); //應(yīng)用下載

setNotification(context, bean.getDetail()); //顯示通知欄

}

})

.negativeText("取消") //選擇取消

.onNegative(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

dialog.dismiss();

}

})

.show();

}

三、下載更新APK文件,并顯示進(jìn)度條和通知欄

這部分是重點,分三部分解決:

1、顯示進(jìn)度條:

/**

* 應(yīng)用下載對話框

*

* @param downloadUrl APK下載鏈接

*/

private void downloadDialog(final Context mContext, String downloadUrl) {

downLoadDialog = new MaterialDialog.Builder(mContext)

.customView(R.layout.layout_app_update, false) //自定義View

.title("更新中...")

.iconRes(R.drawable.ic_logo_share)

.titleColor(Color.parseColor("#FFC736"))

.negativeText("取消下載") //選擇取消

.canceledOnTouchOutside(false) // 觸摸窗口邊界以外是否關(guān)閉窗口,設(shè)置 false

.onNegative(new MaterialDialog.SingleButtonCallback() {

@Override

public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

ToastUtils.showShortToast(mContext, "取消更新");

dialog.dismiss();

notificationManager.cancel(NOTIFICATION_ID); //取消通知欄

OkHttpClientUtil.getInstance().cancelOkHttp("download"); //取消下載更新

}

})

.build();

//攔截手機(jī)返回鍵

downLoadDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {

@Override

public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

ToastUtils.showShortToast(mContext, "進(jìn)入后臺下載模式");

return keyCode != KeyEvent.KEYCODE_BACK &&

downLoadDialog != null && downLoadDialog.isShowing();

}

});

npbDownload = downLoadDialog.getCustomView().findViewById(R.id.npb_download); //設(shè)置進(jìn)度條

npbDownload.setProgressTextSize(45); //設(shè)置進(jìn)度條字體大小

downLoadDialog.show();

downloadApk(mContext, downloadUrl); //下載更新APK

}

3、通知欄展示進(jìn)度:

/**

* 創(chuàng)建通知欄

*/

private void setNotification(Context context, String detail) {

notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

notification = new Notification.Builder(context);

notification.setSmallIcon(R.drawable.ic_16) //設(shè)置通知的圖標(biāo)

.setTicker("正在加載更新包") //設(shè)置狀態(tài)欄的標(biāo)題

.setContentTitle("正在加載更新包") //設(shè)置標(biāo)題

.setContentText(detail) //設(shè)置內(nèi)容

.setDefaults(Notification.FLAG_NO_CLEAR) //設(shè)置默認(rèn)的提示音

.setPriority(Notification.PRIORITY_DEFAULT) //設(shè)置該通知的優(yōu)先級

.setOngoing(true) //讓通知左右滑的時候不能取消通知

.setWhen(System.currentTimeMillis()) //設(shè)置通知時間,默認(rèn)為系統(tǒng)發(fā)出通知的時間,通常不用設(shè)置

.setAutoCancel(true); //打開程序后圖標(biāo)消失

//解決5.0系統(tǒng)通知欄白色I(xiàn)con的問題

Drawable appIcon = getAppIcon(context);

Bitmap drawableToBitmap = null;

if (appIcon != null) {

drawableToBitmap = drawableToBitmap(appIcon);

}

if (drawableToBitmap != null) {

notification.setSmallIcon(R.drawable.ic_16);

notification.setLargeIcon(drawableToBitmap);

} else {

notification.setSmallIcon(context.getApplicationInfo().icon);

}

Notification notify = notification.build();

notify.flags |= FLAG_ONLY_ALERT_ONCE;

notificationManager.notify(NOTIFICATION_ID, notify);

}

/**

* 合成更新的Icon

*

* @param drawable

* @return

*/

public Bitmap drawableToBitmap(Drawable drawable) {

Bitmap bitmap = Bitmap.createBitmap(

drawable.getIntrinsicWidth(),

drawable.getIntrinsicHeight(),

drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);

Canvas canvas = new Canvas(bitmap);

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

drawable.draw(canvas);

return bitmap;

}

/**

* 獲取App的Icon

*

* @param context

* @return

*/

public Drawable getAppIcon(Context context) {

try {

return context.getPackageManager().getApplicationIcon(context.getPackageName());

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

return null;

}

總結(jié)

以上是生活随笔為你收集整理的Android在线更新安装包,Android在线更新下载方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。