package com.info.sn.service; import android.app.AlertDialog; import android.app.Service; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.provider.Settings; import android.util.Log; import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.task.DownloadTask; import com.blankj.utilcode.util.NetworkUtils; import com.blankj.utilcode.util.ToastUtils; import com.info.sn.BuildConfig; import com.info.sn.R; import com.info.sn.network.api.HTTPInterface; import com.info.sn.utils.ApkUtils; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.FileCallback; import com.lzy.okgo.model.Progress; import com.lzy.okgo.model.Response; import java.io.File; import java.lang.ref.WeakReference; // 下载管理服务 public class MyDownloadService extends Service implements NetworkUtils.OnNetworkStatusChangedListener { @Override public int onStartCommand(Intent intent, int flags, int startId) { flags = START_STICKY; startService(new Intent(this, StepService.class)); startService(new Intent(this, GuardService.class)); CheckUpdate(); CheckUpdateByPackageName("com.appstore.uiui", handler); //静默升级应用市场 CheckUpdateByPackageName("com.android.uiuios", handler); //静默升级桌面 CheckUpdateByPackageName("com.uiuios.updatetools", handler); //静默升级更新工具 // HTTPInterface.getAllAppPackageName(handler); Aria.download(this).register(); Aria.download(this).resumeAllTask(); //恢复所有未完成的下载任务 return START_STICKY; } @Override public void onCreate() { super.onCreate(); // new Thread(new Runnable() { // @Override // public void run() { // while (true) { // LogUtils.e("packagename", MyApplication.getTaskPackname()); // LogUtils.e("packagename", String.valueOf(MyApplication.getSystemBattery())); //// MyApplication.sendStartTime(); // try { // Thread.sleep(5000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // } // }).start(); } synchronized private void CheckUpdate() { HTTPInterface.checkUpdateByself(handler, this.getPackageName(), String.valueOf(BuildConfig.VERSION_CODE)); } synchronized private void CheckUpdateByPackageName(String packageName, Handler handlers) { PackageManager pm = getPackageManager(); PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (null != packageInfo) { HTTPInterface.checkUpdateByPackage(handlers, packageName, String.valueOf(packageInfo.versionCode)); } else { HTTPInterface.checkUpdateByPackage(handlers, packageName, "0"); } } @Override public void onDestroy() { super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } private Handler handler = new Handler() { @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: break; case 200: Bundle bundle = (Bundle) msg.obj; getFile(bundle); break; case 201: String apppackage = (String) msg.obj; Log.e("handler", Settings.System.getString(getContentResolver(), "qch_app_forbid") + "?"); try { Settings.System.putString(getContentResolver(), "qch_app_forbid", apppackage+ "com.info.sn,com.android.uiuios,com.appstore.uiui,com.uiuios.updatetools"); } catch (Exception e) { Log.e("fht", e.getMessage()); } break; case 202: break; case 300: Bundle b = (Bundle) msg.obj; update(b); break; } } }; private void getFile(final Bundle bundle) { String url = bundle.getString("url"); final File path = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/"); path.mkdirs(); final File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/" + url.substring(url.lastIndexOf("/") + 1)); if (file.exists() && file.isFile()) { // AlertDialog.Builder builder = new AlertDialog.Builder(this) // .setTitle("软件更新") // .setIcon(R.mipmap.ic_launcher) // .setCancelable(false) // .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) // .setPositiveButton("确定", new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialogInterface, int i) { ApkUtils.installApp(MyDownloadService.this, file.getAbsolutePath()); // dialogInterface.dismiss(); // } // }); // AlertDialog ad = builder.create(); // ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); // ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 // ad.show(); } else { OkGo.get(url) .execute(new FileCallback("Sninfo/" + url.substring(url.lastIndexOf("/") + 1)) { @Override public void onSuccess(final Response response) { // Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_forbid", "com.baidu.video"); // ApkUtils.installApkInSilence(response.body().getAbsolutePath(), Launcher.this.getPackageName()); // AlertDialog.Builder builder = new AlertDialog.Builder(MyDownFile download FailureloadService.this) // .setTitle("软件更新") // .setIcon(R.mipmap.ic_launcher) // .setCancelable(false) // .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) // .setPositiveButton("确定", new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialogInterface, int i) { ApkUtils.installApp(MyDownloadService.this, response.body().getAbsolutePath()); // dialogInterface.dismiss(); // } // }); // AlertDialog ad = builder.create(); // ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); // ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 // ad.show(); Log.e("getFile", "download file successful,now installing"); } @Override public void onError(Response response) { super.onError(response); Log.e("getFile", "File download Failure" + response.getException()); } @Override public void downloadProgress(Progress progress) { super.downloadProgress(progress); Log.e("getFile", "已下载:" + progress.currentSize + ",总大小:" + progress.totalSize + ",进度:" + progress.fraction + ",当前网速:" + progress.speed); } }); } } private void update(final Bundle bundle) { String url = bundle.getString("url"); final File path = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/"); path.mkdirs(); final File file = new File(Environment.getExternalStoragePublicDirectory("Download") + "/Sninfo/" + url.substring(url.lastIndexOf("/") + 1)); if (file.exists() && file.isFile()) { AlertDialog.Builder builder = new AlertDialog.Builder(this) .setTitle("软件更新") .setIcon(R.mipmap.ic_launcher) .setCancelable(false) .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ApkUtils.installApk(MyDownloadService.this, file); dialogInterface.dismiss(); } }); AlertDialog ad = builder.create(); ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 ad.show(); } else { OkGo.get(url) .execute(new FileCallback("Sninfo/" + url.substring(url.lastIndexOf("/") + 1)) { @Override public void onSuccess(final Response response) { // Settings.System.putString(getApplicationContext().getContentResolver(), "qch_app_forbid", "com.baidu.video"); // ApkUtils.installApkInSilence(response.body().getAbsolutePath(), Launcher.this.getPackageName()); AlertDialog.Builder builder = new AlertDialog.Builder(MyDownloadService.this) .setTitle("软件更新") .setIcon(R.mipmap.ic_launcher) .setCancelable(false) .setMessage("发现新版本,点击确定更新\n" + "更新内容:" + bundle.getString("content")) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ApkUtils.installApk(MyDownloadService.this, response.body()); dialogInterface.dismiss(); } }); AlertDialog ad = builder.create(); ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失 ad.show(); Log.e("getFile", "download file successful,now installing"); } @Override public void onError(Response response) { super.onError(response); Log.e("getFile", "File download Failure" + response.getException()); } @Override public void downloadProgress(Progress progress) { super.downloadProgress(progress); Log.e("getFile", "已下载:" + progress.currentSize + ",总大小:" + progress.totalSize + ",进度:" + progress.fraction + ",当前网速:" + progress.speed); } }); } } @Override public void onDisconnected() { } @Override public void onConnected(NetworkUtils.NetworkType networkType) { Aria.download(this).resumeAllTask(); } //在这里处理任务执行中的状态,如进度进度条的刷新 @Download.onTaskRunning protected void running(DownloadTask task) { ToastUtils.showShort("正在下载:" + task.getExtendField() + "-" + task.getPercent() + "%"); Log.e("aria running", "正在下载:" + task.getState() + "--" + task.getPercent() + "--" + task.getExtendField()); } @Download.onTaskComplete void taskComplete(DownloadTask task) { //在这里处理任务完成的状态 ApkUtils.installApp(MyDownloadService.this, task.getFilePath()); Log.e("taskComplete", task.getExtendField()); Aria.download(this).load(task.getDownloadEntity().getId()).cancel(); } }