当前位置 : 主页 > 编程语言 > java >

APP内部更新

来源:互联网 收集:自由互联 发布时间:2021-06-28
APP内部更新 public class DownloadService extends Service{ private String mDownloadUrl;//APK的下载路径 private NotificationManager mNotificationManager; private Notification mNotification; public static void actionStart(Context cont
APP内部更新
public class DownloadService extends Service{
    private String mDownloadUrl;//APK的下载路径
    private NotificationManager mNotificationManager;
    private Notification mNotification;

    public static void actionStart(Context context, String apkUrl) {
        Intent intent = new Intent(context, DownloadService.class);
        intent.putExtra("apkUrl", apkUrl);
        context.startService(intent);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mNotificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent == null) {
            notifyMsg("温馨提醒", "文件下载失败", 0);
            stopSelf();//杀死Service
        }
        mDownloadUrl = intent.getStringExtra("apkUrl");//获取下载APK的链接
        downloadFile(mDownloadUrl);//下载APK
        return super.onStartCommand(intent, flags, startId);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private void notifyMsg(String title, String content, int progress) {

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.mipmap.download_white_arrows).setLargeIcon(BitmapFactory.decodeResource(
                getResources(), R.mipmap.ic_launcher)).setContentTitle(title);
        if (progress > 0 && progress < 100) {
            //下载进行中
            builder.setProgress(100, progress, false);
        } else {
            builder.setProgress(0, 0, false);
        }
        builder.setAutoCancel(true);
        builder.setWhen(System.currentTimeMillis());
        builder.setContentText(content);
        if (progress >= 100) {
            //下载完成
            builder.setContentIntent(getInstallIntent());
        }
        mNotification = builder.build();
        mNotificationManager.notify(0, mNotification);

    }

    /**
     * 安装apk文件
     *
     * @return
     */
    private PendingIntent getInstallIntent() {
        File file = new File(SDCardUtils.getFileStoragePath()
                + mDownloadUrl.substring(mDownloadUrl.lastIndexOf("/")));
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.parse("file://" + file.getAbsolutePath())
                , "application/vnd.android.package-archive");
        PendingIntent pendingIntent = PendingIntent.getActivity(this
                , 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        return pendingIntent;
    }


    /**
     * 下载apk文件
     *
     * @param url
     */
    private void downloadFile(String url) {
        if (SDCardUtils.isCanDownloadFile(SDCardUtils
                .getFileStoragePath() + mDownloadUrl.substring(
                mDownloadUrl.lastIndexOf("/")))) {

            OkHttpUtils.get().url(url).build().execute(new FileCallBack(SDCardUtils
                    .getFileStoragePath(),
                    mDownloadUrl.substring(mDownloadUrl.lastIndexOf("/"))) {
                @Override
                public void onError(Call call, Exception e) {
                    notifyMsg("闪电快金融", "文件下载失败", 0);
                    stopSelf();
                }

                @Override
                public void onResponse(Call call, File file) {
                    //当文件下载完成后回调
                    notifyMsg("闪电快金融", "文件下载已完成", 100);
                    stopSelf();
                    Toast.makeText(getApplicationContext(), "文件下载完成", Toast
                            .LENGTH_SHORT).show();
                    File fileIntent = new File(SDCardUtils.getFileStoragePath() + mDownloadUrl
                            .substring(mDownloadUrl.lastIndexOf("/")));
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setDataAndType(Uri.parse("file://" + fileIntent.getAbsolutePath()),
                            "application/vnd.android.package-archive");
                    startActivity(intent);
                    mNotificationManager.cancel(0);
                }

                @Override
                public void inProgress(float progress, long total) {
                    //progress*100为当前文件下载进度,total为文件大小
                    if ((int) (progress * 100) % 10 == 0) {
                        //避免频繁刷新View,这里设置每下载10%提醒更新一次进度
                        notifyMsg("闪电快金融", "文件正在下载..", (int) (progress * 100));
                    }
                }
            });
        }
    }
}
网友评论