notification自动更新

来源:互联网 发布:业主名录采集软件 编辑:程序博客网 时间:2024/04/30 09:20
JsonResponseHandleMSJQ handler_version_new = new JsonResponseHandleMSJQ(this) {        @Override        public void onSuccess(JSONArray jsonArray) {            try {                String versionUrl = null;                List<Bean_Dict_Version_New> mListVersion = new Gson().fromJson(jsonArray.toString(), new TypeToken<List<Bean_Dict_Version_New>>() {                }.getType());                String versionCode = "";                String versionDesc = "";                for (Bean_Dict_Version_New bean_dict_version : mListVersion) {                    if ("android".equals(bean_dict_version.getPlatForm())) {                        if ("labx_share".equals(bean_dict_version.getAppName())) {                            versionCode = bean_dict_version.getAppVersion();                            versionUrl = Utils.getStrPathPic(ActSplash.this, bean_dict_version.getFilePathValue());                            versionDesc = bean_dict_version.getVersionChangeDesc();                            break;                        }                    }                }                // 获取当前软件包信息                PackageInfo pi = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), PackageManager.GET_CONFIGURATIONS);                // 当前软件版本号                String versionLocal = pi.versionName;                Timber.e("local:" + versionLocal + "server:" + versionCode);                if (!TextUtils.isEmpty(versionCode)) {                    if (!versionCode.equals(versionLocal)) {                        final String finalVersionUrl = versionUrl;                        if (isAvailable) {                            AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);                            alertDialog.setPositiveButton("更新", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    dialog.dismiss();                                    Intent intent = new Intent(ActSplash.this, UpdateService.class);                                    intent.putExtra("url", finalVersionUrl);                                    startService(intent);                                    goToNextAct();                                }                            });                            alertDialog.setNegativeButton("忽略", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    dialog.dismiss();                                    goToNextAct();                                }                            });                            alertDialog.setTitle("新版更新提示");                            alertDialog.setMessage(versionDesc);                            alertDialog.setCancelable(false);                            alertDialog.create().show();                        } else {                            new SharedPreferencesHelper(ActSplash.this).LogOut();                            AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);                            alertDialog.setPositiveButton("立刻更新", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    dialog.dismiss();                                    Intent intent = new Intent(ActSplash.this, UpdateService.class);                                    intent.putExtra("url", finalVersionUrl);                                    startService(intent);                                }                            });                            alertDialog.setNegativeButton("退出应用", new DialogInterface.OnClickListener() {                                @Override                                public void onClick(DialogInterface dialog, int which) {                                    dialog.dismiss();                                    finish();                                }                            });                            alertDialog.setTitle("新版更新提示");                            alertDialog.setMessage(versionDesc);                            alertDialog.setCancelable(false);                            alertDialog.create().show();                        }                    } else {                        goToNextAct();                    }                } else {                    goToNextAct();                }            } catch (Exception e) {                e.printStackTrace();            }        }    };

2,updateService

package com.weilaifu.aqbx.base;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.app.Service;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.IBinder;import android.os.Looper;import android.os.Message;import android.widget.RemoteViews;import android.widget.Toast;import com.weilaifu.aqbx.R;import com.weilaifu.aqbx.act.ActMain;import com.weilaifu.aqbx.util.Utils;import com.weilaifu.msjqlib.util.UtilTools;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class UpdateService extends Service {    private NotificationManager nm;    private Notification notification;    private File tempFile = null;    private boolean cancelUpdate = false;    private MyHandler myHandler;    private int download_precent = 0;    private RemoteViews views;    private int notificationId = 1234;    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onStart(Intent intent, int startId) {        super.onStart(intent, startId);    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        UtilTools.showToast(getApplicationContext(), R.string.text_toast_update);        nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//        notification = new Notification();//        notification.icon = android.R.drawable.stat_sys_download;//        //notification.icon=android.R.drawable.stat_sys_download_done;//        notification.tickerText = getString(R.string.app_name) + getString(R.string.text_app_update);//        notification.when = System.currentTimeMillis();//        notification.defaults = Notification.DEFAULT_LIGHTS;        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, ActMain.class), 0);        Notification.Builder builder = new Notification.Builder(UpdateService.this);        builder.setSmallIcon(R.drawable.ic_logo)                .setTicker(getString(R.string.app_name) + "正在更新")                .setContentTitle(getString(R.string.app_name))                .setContentIntent(contentIntent);        views = new RemoteViews(getPackageName(), R.layout.update);        builder.setContent(views);        notification = builder.getNotification();        nm.notify(notificationId, notification);        myHandler = new MyHandler(Looper.myLooper(), this);        Message message = myHandler.obtainMessage(3, 0);        myHandler.sendMessage(message);        downFile(intent.getStringExtra("url"));        return super.onStartCommand(intent, flags, startId);    }    @Override    public void onDestroy() {        super.onDestroy();    }    private void downFile(final String url) {        new Thread() {            public void run() {                try {                    HttpClient client = new DefaultHttpClient();                    HttpGet get = new HttpGet(url);                    HttpResponse response = client.execute(get);                    HttpEntity entity = response.getEntity();                    long length = entity.getContentLength();                    InputStream is = entity.getContent();                    if (is != null) {                        File rootFile = new File(Environment.getExternalStorageDirectory(), "/" + Utils.DIR);                        if (!rootFile.exists() && !rootFile.isDirectory())                            rootFile.mkdir();                        tempFile = new File(Environment.getExternalStorageDirectory(),                                "/" + Utils.DIR + "/" + url.substring(url.lastIndexOf("/") + 1));                        if (tempFile.exists())                            tempFile.delete();                        tempFile.createNewFile();                        BufferedInputStream bis = new BufferedInputStream(is);                        FileOutputStream fos = new FileOutputStream(tempFile);                        BufferedOutputStream bos = new BufferedOutputStream(fos);                        int read;                        long count = 0;                        int precent = 0;                        byte[] buffer = new byte[1024];                        while ((read = bis.read(buffer)) != -1 && !cancelUpdate) {                            bos.write(buffer, 0, read);                            count += read;                            precent = (int) (((double) count / length) * 100);                            if (precent - download_precent >= 5) {                                download_precent = precent;                                Message message = myHandler.obtainMessage(3, precent);                                myHandler.sendMessage(message);                            }                        }                        bos.flush();                        bos.close();                        fos.flush();                        fos.close();                        is.close();                        bis.close();                    }                    if (!cancelUpdate) {                        Message message = myHandler.obtainMessage(2, tempFile);                        myHandler.sendMessage(message);                    } else {                        tempFile.delete();                    }                } catch (ClientProtocolException e) {                    Message message = myHandler.obtainMessage(4, "下载应用失败");                    myHandler.sendMessage(message);                } catch (IOException e) {                    Message message = myHandler.obtainMessage(4, "下载应用失败");                    myHandler.sendMessage(message);                } catch (Exception e) {                    Message message = myHandler.obtainMessage(4, "下载应用失败");                    myHandler.sendMessage(message);                }            }        }.start();    }    private void Instanll(File file, Context context) {        Intent intent = new Intent(Intent.ACTION_VIEW);        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.setAction(Intent.ACTION_VIEW);        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");        context.startActivity(intent);    }    class MyHandler extends Handler {        private Context context;        public MyHandler(Looper looper, Context c) {            super(looper);            this.context = c;        }        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg != null) {                switch (msg.what) {                    case 0:                        Toast.makeText(context, msg.obj.toString(), Toast.LENGTH_SHORT).show();                        break;                    case 1:                        break;                    case 2:                        download_precent = 0;                        nm.cancel(notificationId);                        Instanll((File) msg.obj, context);                        stopSelf();                        break;                    case 3:                        views.setTextViewText(R.id.tvProcess, download_precent + "%");                        views.setProgressBar(R.id.pbDownload, 100, download_precent, false);//                        notification.contentView = views;                        nm.notify(notificationId, notification);                        break;                    case 4:                        nm.cancel(notificationId);                        break;                }            }        }    }    //---------------------------------------------------------------------    /**     * �������ؿ�     */    private void showDownloadDialog() {//        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);//        builder.setTitle("�汾������...");//        final LayoutInflater inflater = LayoutInflater.from(mContext);//        View v = inflater.inflate(R.layout.dialog_download, null);//        progressBar = (NumberProgressBar) v.findViewById(R.id.pb_dialog_download);//        builder.setView(v);//        builder.setNegativeButton("ȡ��", new DialogInterface.OnClickListener() {//            public void onClick(DialogInterface dialog, int which) {//                dialog.dismiss();//                //��ֹ����//                isInterceptDownload = true;//            }//        });//        dialogDownload = builder.create();//        dialogDownload.show();////        //����apk//        Thread downLoadThread = new Thread(downApkRunnable);//        downLoadThread.start();    }    // ���ؽ����//    private NumberProgressBar progressBar;    // �Ƿ���ֹ����    private boolean isInterceptDownload = false;    //�������ʾ��ֵ    private int progress = 0;    /**     * �ӷ����������°�apk���߳�     */    private Runnable downApkRunnable = new Runnable() {        @Override        public void run() {            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                //���û��SD��//                AlertDialog.Builder builder = new AlertDialog.Builder(mContext);//                builder.setTitle("��ʾ");//                builder.setMessage("��ǰ�豸��SD��������޷�����");//                builder.setPositiveButton("ȷ��", new DialogInterface.OnClickListener() {//                    @Override//                    public void onClick(DialogInterface dialog, int which) {//                        dialog.dismiss();//                    }//                });//                builder.show();            } else {                try {                    //���������°�apk��ַ                    URL url = new URL("");                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    conn.connect();                    int length = conn.getContentLength();                    InputStream is = conn.getInputStream();                    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/updateApkFile/");                    if (!file.exists()) {                        //����ļ��в�����,�                                             
0 0
原创粉丝点击