diff --git a/sample/build.gradle b/sample/build.gradle index 29d1643..11de3fe 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -31,8 +31,8 @@ dependencies { }) compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" -// compile project(':update-app') - compile project(':update-app-kotlin') + compile project(':update-app') +// compile project(':update-app-kotlin') //compile 'com.qianwen:update-app-kotlin:1.1.0' //okgo diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 120dfcd..eaa685c 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -32,8 +32,8 @@ - - + + diff --git a/sample/src/main/java/com/vector/appupdatedemo/ui/JavaActivity.java b/sample/src/main/java/com/vector/appupdatedemo/ui/JavaActivity.java index 207308d..653c9eb 100644 --- a/sample/src/main/java/com/vector/appupdatedemo/ui/JavaActivity.java +++ b/sample/src/main/java/com/vector/appupdatedemo/ui/JavaActivity.java @@ -81,6 +81,7 @@ public void updateApp(View view) { .setActivity(this) //更新地址 .setUpdateUrl(mUpdateUrl) + .dismissNotificationProgress() //实现httpManager接口的对象 .setHttpManager(new UpdateAppHttpUtil()) // // 监听更新提示框相关事件 @@ -284,6 +285,11 @@ public void onError(String msg) { HProgressDialogUtils.cancel(); } + + @Override + public boolean onInstallAppAndAppOnForeground(File file) { + return false; + } }); } else { //不显示下载进度 diff --git a/sample/src/main/java/com/vector/appupdatedemo/ui/KotlinActivity.kt b/sample/src/main/java/com/vector/appupdatedemo/ui/KotlinActivity.kt deleted file mode 100644 index 7a8f0e0..0000000 --- a/sample/src/main/java/com/vector/appupdatedemo/ui/KotlinActivity.kt +++ /dev/null @@ -1,281 +0,0 @@ -package com.vector.appupdatedemo.ui - -import android.os.Bundle -import android.os.Environment -import android.support.v7.app.AppCompatActivity -import com.vector.appupdatedemo.R -import com.vector.appupdatedemo.ext.cancelProgressDialog -import com.vector.appupdatedemo.ext.dialog -import com.vector.appupdatedemo.ext.showProgressDialog -import com.vector.appupdatedemo.ext.toast -import com.vector.appupdatedemo.http.UpdateAppHttpUtil -import com.vector.appupdatedemo.util.HProgressDialogUtils -import com.vector.update_app.SilenceUpdateCallback -import com.vector.update_app.UpdateAppBean -import com.vector.update_app.UpdateAppManager -import com.vector.update_app.utils.AppUpdateUtils -import com.vector.update_app_kotlin.* -import kotlinx.android.synthetic.main.activity_kotlin.* -import org.json.JSONObject -import java.io.File -import java.util.* - -class KotlinActivity : AppCompatActivity() { - private val mUpdateUrl = "https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/json/json.txt" - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_kotlin) - btn_default.setSolidTheme() - btn_diy_1.setStrokeTheme() - btn_diy_2.setStrokeTheme() - btn_diy_3.setStrokeTheme() - btn_diy_4.setStrokeTheme() - btn_diy_5.setStrokeTheme() - - btn_default.setOnClickListener { - defaultUpdate() - } - btn_diy_1.setOnClickListener { - updateDiy1() - } - - btn_diy_2.setOnClickListener { - updateDiy2() - } - btn_diy_3.setOnClickListener { - updateDiy3() - } - btn_diy_4.setOnClickListener { - updateDiy4() - } - btn_diy_5.setOnClickListener { - updateDiy5() - } - } - - - private var isShowDownloadProgress: Boolean = false - /** - * 最简方式 - */ - private fun defaultUpdate() { - updateApp(mUpdateUrl, UpdateAppHttpUtil()).update() - } - - /** - * 自定义接口协议+自定义对话框 - */ - private fun updateDiy2() { - isShowDownloadProgress = false - diy() - } - - - /** - * 自定义接口协议+自定义对话框+显示进度对话框 - */ - private fun updateDiy3() { - isShowDownloadProgress = true - diy() - } - - private fun diy() { - //下载路径 - val path = Environment.getExternalStorageDirectory().absolutePath - //自定义参数 - val params = HashMap() - params.put("appKey", "ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f") - params.put("appVersion", AppUpdateUtils.getVersionName(this)) - params.put("key1", "value2") - params.put("key2", "value3") - - updateApp(mUpdateUrl, UpdateAppHttpUtil()) - //自定义配置 - { - //以下设置,都是可选 - //设置请求方式,默认get - isPost = false - //添加自定义参数,默认version=1.0.0(app的versionName);apkKey=唯一表示(在AndroidManifest.xml配置) - setParams(params) - //设置apk下砸路径,默认是在下载到sd卡下/Download/1.0.0/test.apk - targetPath = path - //设置appKey,默认从AndroidManifest.xml获取,如果,使用自定义参数,则此项无效 -// setAppKey("ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f") - - } - .check { - onBefore { showProgressDialog() } - //自定义解析 - parseJson { - val jsonObject = JSONObject(it) - UpdateAppBean() - //(必须)是否更新Yes,No - .setUpdate(jsonObject.optString("update")) - //(必须)新版本号, - .setNewVersion(jsonObject.optString("new_version")) - //(必须)下载地址 - .setApkFileUrl(jsonObject.optString("apk_file_url")) - //(必须)更新内容 - .setUpdateLog(jsonObject.optString("update_log")) - //大小,不设置不显示大小,可以不设置 - .setTargetSize(jsonObject.optString("target_size")) - //是否强制更新,可以不设置 - .setConstraint(false) - //设置md5,可以不设置 - .setNewMd5(jsonObject.optString("new_md5")) - - } - - hasNewApp { updateApp, updateAppManager -> - showDiyDialog(updateApp, updateAppManager) - } - noNewApp { toast("没有新版本") } - onAfter { cancelProgressDialog() } - } - } - - /** - * 自定义对话框 - */ - private fun showDiyDialog(updateApp: UpdateAppBean, updateAppManager: UpdateAppManager) { - dialog("是否升级到${updateApp.newVersion}版本?" - , "新版本大小:${updateApp.targetSize}\n\n${updateApp.updateLog}") - { - positiveButton("升级") { - if (isShowDownloadProgress) { - updateAppManager.download { - onStart { HProgressDialogUtils.showHorizontalProgressDialog(this@KotlinActivity, "下载进度", false) } - onProgress { progress, _ -> HProgressDialogUtils.setProgress(Math.round(progress * 100)) } - onFinish { - HProgressDialogUtils.cancel() - true - } - onError { - toast(it) - HProgressDialogUtils.cancel() - } - } - - } else { - updateAppManager.download() - } - - dismiss() - - } - negativeButton("暂不升级") { - dismiss() - } - show() - } - - } - - - /** - * 自定义接口协议 - */ - private fun updateDiy1() { - //下载路径 - val path = Environment.getExternalStorageDirectory().absolutePath - //自定义参数 - val params = HashMap() - params.put("appKey", "ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f") - params.put("appVersion", AppUpdateUtils.getVersionName(this)) - params.put("key1", "value2") - params.put("key2", "value3") - - updateApp(mUpdateUrl, UpdateAppHttpUtil()) - //自定义配置 - { - //以下设置,都是可选 - //设置请求方式,默认get - isPost = false - //添加自定义参数,默认version=1.0.0(app的versionName);apkKey=唯一表示(在AndroidManifest.xml配置) - setParams(params) - //设置点击升级后,消失对话框,默认点击升级后,对话框显示下载进度 - hideDialogOnDownloading(true) - //设置头部,不设置显示默认的图片,设置图片后自动识别主色调,然后为按钮,进度条设置颜色 - topPic = R.mipmap.top_8 - - //为按钮,进度条设置颜色。 - themeColor = 0xffffac5d.toInt() - //设置apk下砸路径,默认是在下载到sd卡下/Download/1.0.0/test.apk - targetPath = path - //设置appKey,默认从AndroidManifest.xml获取,如果,使用自定义参数,则此项无效 -// setAppKey("ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f") - - } - .check { - onBefore { showProgressDialog() } - //自定义解析 - parseJson { - val jsonObject = JSONObject(it) - UpdateAppBean() - //(必须)是否更新Yes,No - .setUpdate(jsonObject.optString("update")) - //(必须)新版本号, - .setNewVersion(jsonObject.optString("new_version")) - //(必须)下载地址 - .setApkFileUrl(jsonObject.optString("apk_file_url")) - //(必须)更新内容 - .setUpdateLog(jsonObject.optString("update_log")) - //大小,不设置不显示大小,可以不设置 - .setTargetSize(jsonObject.optString("target_size")) - //是否强制更新,可以不设置 - .setConstraint(false) - //设置md5,可以不设置 - .setNewMd5(jsonObject.optString("new_md5")) - - } - noNewApp { toast("没有新版本") } - onAfter { cancelProgressDialog() } - } - - } - - /** - * 静默下载 - */ - private fun updateDiy4() { - updateApp(mUpdateUrl, UpdateAppHttpUtil()) - { - setOnlyWifi() - }.silenceUpdate() - } - - /** - * 静默下载+自定义对话框 - */ - private fun updateDiy5() { - updateApp(mUpdateUrl, UpdateAppHttpUtil()) - { - setOnlyWifi() - }.checkNewApp(object : SilenceUpdateCallback() { - override fun showDialog(updateApp: UpdateAppBean, updateAppManager: UpdateAppManager?, appFile: File) { - showSilenceDiyDialog(updateApp, appFile) - } - }) - } - - /** - * 自定义对话框 - */ - private fun showSilenceDiyDialog(updateApp: UpdateAppBean, appFile: File?) { - dialog("是否升级到${updateApp.newVersion}版本?" - , "新版本大小:${updateApp.targetSize}\n\n${updateApp.updateLog}") - { - positiveButton("升级") { - AppUpdateUtils.installApp(this@KotlinActivity, appFile) - dismiss() - - } - negativeButton("暂不升级") { - dismiss() - } - show() - } - } - - -} diff --git a/sample/src/main/java/com/vector/appupdatedemo/ui/MainActivity.java b/sample/src/main/java/com/vector/appupdatedemo/ui/MainActivity.java index e02ec12..e6ce19b 100644 --- a/sample/src/main/java/com/vector/appupdatedemo/ui/MainActivity.java +++ b/sample/src/main/java/com/vector/appupdatedemo/ui/MainActivity.java @@ -55,7 +55,7 @@ public void updateJava(View view) { startActivity(new Intent(this, JavaActivity.class)); } - public void updateKotlin(View view) { - startActivity(new Intent(this, KotlinActivity.class)); - } +// public void updateKotlin(View view) { +// startActivity(new Intent(this, KotlinActivity.class)); +// } } diff --git a/update-app/src/main/java/com/vector/update_app/UpdateDialogFragment.java b/update-app/src/main/java/com/vector/update_app/UpdateDialogFragment.java index 3e37e6e..b7a716c 100644 --- a/update-app/src/main/java/com/vector/update_app/UpdateDialogFragment.java +++ b/update-app/src/main/java/com/vector/update_app/UpdateDialogFragment.java @@ -73,6 +73,7 @@ public void onServiceDisconnected(ComponentName name) { private ImageView mTopIv; private TextView mIgnore; private IUpdateDialogFragmentListener mUpdateDialogFragmentListener; + private DownloadService.DownloadBinder mDownloadBinder; public UpdateDialogFragment setUpdateDialogFragmentListener(IUpdateDialogFragmentListener updateDialogFragmentListener) { this.mUpdateDialogFragmentListener = updateDialogFragmentListener; @@ -81,7 +82,7 @@ public UpdateDialogFragment setUpdateDialogFragmentListener(IUpdateDialogFragmen public static UpdateDialogFragment newInstance(Bundle args) { UpdateDialogFragment fragment = new UpdateDialogFragment(); - if(args != null) { + if (args != null) { fragment.setArguments(args); } return fragment; @@ -297,7 +298,8 @@ public void onClick(View view) { // if (mNumberProgressBar.getVisibility() == View.VISIBLE) { // Toast.makeText(getApplicationContext(), "后台更新app", Toast.LENGTH_LONG).show(); // } - if(mUpdateDialogFragmentListener != null){ + cancelDownloadService(); + if (mUpdateDialogFragmentListener != null) { // 通知用户 mUpdateDialogFragmentListener.onUpdateNotifyDialogCancel(mUpdateApp); } @@ -308,6 +310,10 @@ public void onClick(View view) { } } + public void cancelDownloadService() { + mDownloadBinder.stop("取消下载"); + } + private void installApp() { if (AppUpdateUtils.appIsDownloaded(mUpdateApp)) { AppUpdateUtils.installApp(UpdateDialogFragment.this, AppUpdateUtils.getAppFile(mUpdateApp)); @@ -355,6 +361,8 @@ private void startDownloadApp(DownloadService.DownloadBinder binder) { // 开始下载,监听下载进度,可以用对话框显示 if (mUpdateApp != null) { + this.mDownloadBinder = binder; + binder.start(mUpdateApp, new DownloadService.DownloadCallback() { @Override public void onStart() { @@ -419,8 +427,9 @@ public boolean onInstallAppAndAppOnForeground(File file) { public void show(FragmentManager manager, String tag) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { - if (manager.isDestroyed()) + if (manager.isDestroyed()) { return; + } } try { @@ -436,3 +445,4 @@ public void onDestroyView() { super.onDestroyView(); } } + diff --git a/update-app/src/main/java/com/vector/update_app/service/DownloadService.java b/update-app/src/main/java/com/vector/update_app/service/DownloadService.java index 7942563..71f2715 100644 --- a/update-app/src/main/java/com/vector/update_app/service/DownloadService.java +++ b/update-app/src/main/java/com/vector/update_app/service/DownloadService.java @@ -55,6 +55,12 @@ public static void bindService(Context context, ServiceConnection connection) { isRunning = true; } + @Override + public boolean onUnbind(Intent intent) { + isRunning = false; + return super.onUnbind(intent); + } + @Override public void onCreate() { super.onCreate(); @@ -215,6 +221,10 @@ public void start(UpdateAppBean updateApp, DownloadCallback callback) { //下载 startDownload(updateApp, callback); } + + public void stop(String msg) { + DownloadService.this.stop(msg); + } } class FileDownloadCallBack implements HttpManager.FileCallback {