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
- notification自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- 自动更新
- android之apk自动更新采用Notification通知提示并显示下载进度
- android之apk自动更新采用Notification通知提示并显示下载进度
- Notification
- Notification
- Notification
- Notification
- Leetcode - Remove Element
- 打包软件使用
- 搜索—Problem_1017-非常可乐
- HDU 3308 线段树之区间合并
- HDU 1114 完全背包
- notification自动更新
- Java 中 List.subList() 方法的使用陷阱
- 【NOIP2013模拟】七夕祭
- Java虚拟机
- SQLiteDatabase(数据库的增删改查)
- MySQL基础 (DML)
- 形态学处理
- Android SDK下载技巧
- 浅谈Android管理task方式