app/build.gradle | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/okgoincar/netUtls/Api.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/okgoincar/slab/SlabMainActivity.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/okgoincar/utils/download/DownloadObserver.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/okgoincar/utils/download/DownloadUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/build.gradle
@@ -32,7 +32,7 @@ ndk { // 设置支持的SO库架构,第三方给的so库哪几种架构,就配置这几种架构 // abiFilters 'armeabi','x86' abiFilters 'armeabi',"x86" abiFilters 'armeabi' } } app/src/main/java/com/okgoincar/netUtls/Api.java
@@ -96,6 +96,7 @@ public static String queryTotalRevenue = "api/driver/queryTotalRevenue"; //api/driver/queryTotalRevenue 获取收入明细 public static String queryPenalties = "api/driver/queryPenalties"; //api/driver/queryPenalties 获取扣款明细 public static String queryNewData_ = "api/version/queryNewData_"; ///api/version/queryNewData_ 获取最新版本数据 } app/src/main/java/com/okgoincar/slab/SlabMainActivity.kt
@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import cn.sinata.rxnetty.NettyClient import cn.sinata.xldutils.utils.Utils import cn.sinata.xldutils.utils.clickDelay import cn.sinata.xldutils.utils.getNowTimeBlack import cn.sinata.xldutils.utils.textColor @@ -23,15 +24,15 @@ import com.okgoincar.base.AMapKit import com.okgoincar.base.BaseEvent import com.okgoincar.base.MyApplication import com.okgoincar.bean.HomeDataBean import com.okgoincar.bean.MainInfoBean import com.okgoincar.bean.UserBean import com.okgoincar.bean.UserInfoBean import com.okgoincar.bean.* import com.okgoincar.netUtls.Api import com.okgoincar.slab.event.SlabMineEventActivity import com.okgoincar.slab.util.DialogUtil import com.okgoincar.utils.DateUtil import com.okgoincar.utils.download.DownloadUtil import com.okgoincar.utils.glide.GlideUtil import kotlinx.android.synthetic.main.slab_activity_main.* import org.greenrobot.eventbus.EventBus import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast @@ -53,33 +54,33 @@ if (b!!) { //晚上 ct_bg.setBackgroundResource(R.color.black_191919) ll_top.setBackgroundResource(R.drawable.bg_gray_top) tv_server_ing.textColor(this,R.color.write) iv_small.textColor(this,R.color.write) tv_wait_server.textColor(this,R.color.write) tv_code_num.textColor(this,R.color.write) tv_name.textColor(this,R.color.write) tv_car_num.textColor(this,R.color.write) tv_star_num.textColor(this,R.color.write) tv_current_time.textColor(this,R.color.write) tv_company.textColor(this,R.color.write) tv_time.textColor(this,R.color.write) tv_car_statue.textColor(this,R.color.write) tv_title.textColor(this,R.color.slab_yellow_zhong) tv_server_ing.textColor(this, R.color.write) iv_small.textColor(this, R.color.write) tv_wait_server.textColor(this, R.color.write) tv_code_num.textColor(this, R.color.write) tv_name.textColor(this, R.color.write) tv_car_num.textColor(this, R.color.write) tv_star_num.textColor(this, R.color.write) tv_current_time.textColor(this, R.color.write) tv_company.textColor(this, R.color.write) tv_time.textColor(this, R.color.write) tv_car_statue.textColor(this, R.color.write) tv_title.textColor(this, R.color.slab_yellow_zhong) } else { ll_top.setBackgroundResource(R.drawable.bg_green_top) ct_bg.setBackgroundResource(R.drawable.write) tv_server_ing.textColor(this,R.color.black) iv_small.textColor(this,R.color.black) tv_wait_server.textColor(this,R.color.black) tv_code_num.textColor(this,R.color.black) tv_name.textColor(this,R.color.black) tv_car_num.textColor(this,R.color.black) tv_star_num.textColor(this,R.color.black) tv_current_time.textColor(this,R.color.black) tv_company.textColor(this,R.color.black) tv_time.textColor(this,R.color.black) tv_car_statue.textColor(this,R.color.black) tv_title.textColor(this,R.color.yellow_ffa72d) tv_server_ing.textColor(this, R.color.black) iv_small.textColor(this, R.color.black) tv_wait_server.textColor(this, R.color.black) tv_code_num.textColor(this, R.color.black) tv_name.textColor(this, R.color.black) tv_car_num.textColor(this, R.color.black) tv_star_num.textColor(this, R.color.black) tv_current_time.textColor(this, R.color.black) tv_company.textColor(this, R.color.black) tv_time.textColor(this, R.color.black) tv_car_statue.textColor(this, R.color.black) tv_title.textColor(this, R.color.yellow_ffa72d) } } @@ -93,8 +94,10 @@ initCall() NettyClient.getInstance().startService() callPersion() showOrder("2221","2",100,2) showOrder("2221", "2", 100, 2) callVersion() } private fun callPersion() { callNet(true, Api.queryInfo, getMapByAny()) { @@ -137,9 +140,9 @@ var data = gson.fromJson<HomeDataBean>(it, HomeDataBean::class.java) homeDataBean = data tv_car.text = if (data.data.work == 1) "收车" else "出车" if (data.data.work == 1){ if (data.data.work == 1) { MyApplication.getTTsManager().setVideoText("您正在上班中") }else{ } else { // MyApplication.getTTsManager().setVideoText("您已下班") var mapC = getMapByAny() mapC["type"] = "2" @@ -169,9 +172,9 @@ override fun setOnclick() { tv_server_ing.setOnClickListener { tv_server_ing.textColor(this, R.color.main_yellow) if (getNowTimeBlack()){ if (getNowTimeBlack()) { tv_wait_server.textColor(this, R.color.white) }else{ } else { tv_wait_server.textColor(this, R.color.black) } mainFragment.state = 1 @@ -180,9 +183,9 @@ tv_wait_server.setOnClickListener { tv_wait_server.textColor(this, R.color.main_yellow) if (getNowTimeBlack()){ if (getNowTimeBlack()) { tv_server_ing.textColor(this, R.color.white) }else{ } else { tv_server_ing.textColor(this, R.color.black) } mainFragment.state = 2 @@ -212,7 +215,7 @@ tv_car.clickDelay { // if (homeDataBean?.data?.work == 1) { // if (homeDataBean?.data?.work == 1) { // callNet(true, Api.work2, getMapByAny()) { // homeDataBean?.data?.work = 2 // tv_car.text = "出车" @@ -260,7 +263,7 @@ } override fun onLocationChanged(p0: AMapLocation?) { if (p0 == null){ if (p0 == null) { toast("高德位置是空的") return } @@ -268,9 +271,33 @@ toast("定位成功") MyApplication.aMapLocation = p0 CacheKey.putKeyStr("location", Gson().toJson(p0)) }else{ } else { p0.let { toast("定位失败"+it.errorCode.toString()) toast("定位失败" + it.errorCode.toString()) } } } private fun callVersion() { var map = getMapByAny() callNet(false, Api.queryNewData_, map) { var bean = gson.fromJson<VersionBean>(it, VersionBean::class.java) if (bean.data.version != "" && bean.data.version != Utils.getAppVersion(this)) { if (bean.data.mandatory == 0) { var pop = DialogUtil.getSlabDelAndSurePopWindow(this, "有新版本是否更新", {}) { DownloadUtil(this).downloadAPK(bean.data.url, "ok出行车载端") } pop.showCenter(window.decorView) } else { var pop = DialogUtil.getSlabDelAndSurePopWindow(this, "版本已过时,是否强制升级?", {}) { DownloadUtil(this).downloadAPK(bean.data.url, "ok出行车载端") toast("后台开始下载,请等待") } pop.showCenter(window.decorView) } } else { toast("已经是最新版本") } } } app/src/main/java/com/okgoincar/utils/download/DownloadObserver.java
New file @@ -0,0 +1,34 @@ package com.okgoincar.utils.download; import android.database.ContentObserver; import android.net.Uri; /** * Created by ts_xiaoA on 2019/12/2 16:05 * E-Mail Address:443502578@qq.com * Desc: */ public class DownloadObserver extends ContentObserver { private OnChangedCallback onChangedCallback; public DownloadObserver() { super(null); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); if (onChangedCallback != null) { onChangedCallback.onChanged(selfChange, uri); } } public interface OnChangedCallback { void onChanged(boolean selfChange, Uri uri); } public void setOnChangedCallback(OnChangedCallback onChangedCallback) { this.onChangedCallback = onChangedCallback; } } app/src/main/java/com/okgoincar/utils/download/DownloadUtil.java
New file @@ -0,0 +1,214 @@ package com.okgoincar.utils.download; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.net.Uri; import android.os.Environment; import android.util.Log; import android.widget.Toast; /** * Created by ts_xiaoA on 2019/12/2 14:35 * E-Mail Address:443502578@qq.com * Desc: */ public class DownloadUtil { //下载器 private DownloadManager downloadManager; //上下文 private Context mContext; //下载的ID private long downloadId; //进度变化监听 private OnProgressListener onProgressChanged; //下载进度观察者 private DownloadObserver downloadObserver; public DownloadUtil(Context context) { this(context, null); } public DownloadUtil(Context mContext, OnProgressListener onChangedCallback) { this.mContext = mContext; this.onProgressChanged = onChangedCallback; } //下载apk public void downloadAPK(String url, String name) { //创建下载任务 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); //移动网络情况下是否允许漫游 request.setAllowedOverRoaming(false); //在通知栏中显示,默认就是显示的 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.setTitle(name); request.setDescription(name); request.setVisibleInDownloadsUi(true); //设置下载的路径 request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, name); //获取DownloadManager downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); //将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等 downloadId = downloadManager.enqueue(request); //注册广播接收者,监听下载状态 mContext.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); //添加监听 if (onProgressChanged != null) { Uri uriForDownloadedFile = Uri.parse("content://downloads/"); downloadObserver = new DownloadObserver(); downloadObserver.setOnChangedCallback((selfChange, uri) -> { DownloadManager.Query query = new DownloadManager.Query(); Cursor cursor = downloadManager.query(query); cursor.moveToFirst(); int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); double progress = ((double) bytes_downloaded * 100) / (double) bytes_total; Log.i("TAG", "bytes_downloaded: DX"+bytes_downloaded); Log.i("TAG", "bytes_total: DX"+bytes_total); Log.i("TAG", "progress: DX"+progress); cursor.close(); onProgressChanged.onProgressChanged((int) progress); }); mContext.getContentResolver().registerContentObserver(uriForDownloadedFile, true, downloadObserver); } } //广播监听下载的各个状态 private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { checkStatus(); Log.e("onReceive", "onReceive: >>>>>>>>>>>>下载中"); } }; //检查下载状态 private void checkStatus() { DownloadManager.Query query = new DownloadManager.Query(); //通过下载的id查找 query.setFilterById(downloadId); Cursor c = downloadManager.query(query); if (c.moveToFirst()) { int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); switch (status) { //下载暂停 case DownloadManager.STATUS_PAUSED: break; //下载延迟 case DownloadManager.STATUS_PENDING: break; //正在下载 case DownloadManager.STATUS_RUNNING: break; //下载完成 case DownloadManager.STATUS_SUCCESSFUL: if (onProgressChanged != null) { onProgressChanged.onFinish(); } //下载完成安装APK if (downloadObserver != null) { mContext.getContentResolver().unregisterContentObserver(downloadObserver); } installAPK(); break; //下载失败 case DownloadManager.STATUS_FAILED: Toast.makeText(mContext, "下载失败", Toast.LENGTH_SHORT).show(); if (downloadObserver != null) { mContext.getContentResolver().unregisterContentObserver(downloadObserver); } break; } } c.close(); } //下载到本地后执行安装 private void installAPK() { //获取下载文件的Uri Uri downloadFileUri = downloadManager.getUriForDownloadedFile(downloadId); if (downloadFileUri != null) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(downloadFileUri, "application/vnd.android.package-archive"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); mContext.startActivity(intent); mContext.unregisterReceiver(receiver); } } //获取当前下载进度 private int getDownloadPercent(long downloadId) { DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId); Cursor c = downloadManager.query(query); if (c.moveToFirst()) { int downloadBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR); int totalBytesIdx = c.getColumnIndexOrThrow( DownloadManager.COLUMN_TOTAL_SIZE_BYTES); long totalBytes = c.getLong(totalBytesIdx); long downloadBytes = c.getLong(downloadBytesIdx); return (int) (downloadBytes * 100 / totalBytes); } return 0; } //进度监听 public interface OnProgressListener { void onProgressChanged(int progress); void onFinish(); } //下载apk public void download(String url, String name) { //创建下载任务 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); //移动网络情况下是否允许漫游 request.setAllowedOverRoaming(false); //在通知栏中显示,默认就是显示的 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.setTitle(name); request.setDescription(name); request.setVisibleInDownloadsUi(true); //设置下载的路径 request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath(), name); //获取DownloadManager downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); //将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等 downloadId = downloadManager.enqueue(request); //注册广播接收者,监听下载状态 // mContext.registerReceiver(receiver, // new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); // //添加监听 // if (onProgressChanged != null) { // Uri uriForDownloadedFile = Uri.parse("content://downloads/"); // downloadObserver = new DownloadObserver(); // downloadObserver.setOnChangedCallback((selfChange, uri) -> { // DownloadManager.Query query = new DownloadManager.Query(); // Cursor cursor = downloadManager.query(query); // cursor.moveToFirst(); // int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); // int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); // double progress = ((double) bytes_downloaded * 100) / (double) bytes_total; // Log.i("TAG", "bytes_downloaded: DX"+bytes_downloaded); // Log.i("TAG", "bytes_total: DX"+bytes_total); // Log.i("TAG", "progress: DX"+progress); // cursor.close(); // onProgressChanged.onProgressChanged((int) progress); // }); // mContext.getContentResolver().registerContentObserver(uriForDownloadedFile, true, downloadObserver); // } } }