APP更新
来源:互联网 发布:网络社交平台百度百科 编辑:程序博客网 时间:2024/04/29 12:47
import android.app.DownloadManager;
import android.content.ActivityNotFoundException;
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 java.io.File;
public class DownloadManagerHelp {
// http://dworkstudio.com/xalbums/update/update.xmlpublic static final String BASE_PATH = "/xalbums/download/";private static final String TAG = DownloadManagerHelp.class.getSimpleName();public String getUri() { return uri;}public void setUri(String uri) { this.uri = uri;}private String filename = "xalbums.apk";//UpdateVersionTask.APK_NAME;private Context context;private DownloadManager downloadManager;private String uri;private long downloadId = 0;private DownloadManagerHelp(Context c) { this.context = c; downloadManager = (DownloadManager) c .getSystemService(Context.DOWNLOAD_SERVICE);}private static DownloadManagerHelp instance;public static DownloadManagerHelp getInstance(Context c) { if (instance == null) { instance = new DownloadManagerHelp(c); } return instance;}private long getDownloadId(String dirType) { downloadId = 0; try { downloadId = downloadManager.enqueue(new DownloadManager.Request( Uri.parse(uri)) .setAllowedNetworkTypes( DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI) .setAllowedOverRoaming(false) .setTitle(context.getString(R.string.app_name)) .setVisibleInDownloadsUi(true) .setDestinationInExternalPublicDir(dirType, filename)); } catch (Exception e) { // download failed when download manager was disable, so we need create download thread by us. FileDownloadThread.getInstance(context).setUrl(uri); FileDownloadThread.getInstance(context).startDownload(); FLog.i(TAG, "getDownloadId throw error,create download thread by us to try again"); } return downloadId;}private void enableDownloadManager() { try { //Open the specific App Info page: Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + "com.android.providers.downloads")); context.startActivity(intent); } catch (ActivityNotFoundException ex) { ex.printStackTrace(); //Open the generic Apps page: Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS); context.startActivity(intent); }}public void startDownload() { if (downloadManager != null) { FLog.i(TAG, "downlaod strat."); UserSetting.setBoolean(context, Constants.DOWNLOAD_START, true); // 解决K900无法自动升级问题 downloadId = getDownloadId(BASE_PATH); context.registerReceiver(downloadReceiver, new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE)); }}public String getFilename() { return filename;}public void setFilename(String filename) { this.filename = filename;}private BroadcastReceiver downloadReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(downloadId); Cursor c = downloadManager.query(query); if (c != null && c.moveToFirst()) { int status = c.getInt(c .getColumnIndex(DownloadManager.COLUMN_STATUS)); String filename = c.getString(c .getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); switch (status) { case DownloadManager.STATUS_PAUSED: case DownloadManager.STATUS_PENDING: case DownloadManager.STATUS_RUNNING: case DownloadManager.STATUS_SUCCESSFUL: File file = new File(filename); FLog.i("download", "filename:" + filename); installApk(file); break; case DownloadManager.STATUS_FAILED: stopDownload(); break; } } if (c != null) { c.close(); } }};protected void installApk(File file) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); FLog.i(TAG, "downlaod ok ,and install the application.");}public void stopDownload() { if (downloadId != 0) { downloadManager.remove(downloadId); context.unregisterReceiver(downloadReceiver); downloadId = 0; }}
}
2:
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.widget.RemoteViews;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
@SuppressLint(“NewApi”)
public class FileDownloadThread extends Thread {
private String url;private String path = Constants.ROOT_PATH;private String savePath = path + "xalbums.apk";private boolean run = false;private final static int DOWNLOAD_ID = 201;private Context mContext;private Notification.Builder builder;private NotificationManager manager;private FileDownloadThread(Context context) { this.mContext = context; manager = (NotificationManager) mContext .getSystemService(Context.NOTIFICATION_SERVICE); builder = new Notification.Builder(mContext);}private static FileDownloadThread instance = null;public static FileDownloadThread getInstance(Context context) { if (instance == null) { instance = new FileDownloadThread(context); } return instance;}public void sendNotification(int progress, boolean isSuccess) { RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.download_notification); SimpleDateFormat format = new SimpleDateFormat("HH:mm"); Date d1 = new Date(); String t1 = format.format(d1); Intent appIntent = new Intent(Intent.ACTION_MAIN); appIntent.addCategory(Intent.CATEGORY_LAUNCHER); appIntent.setComponent(new ComponentName(mContext.getPackageName(), "com.lenovo.linkit.HomeActivity")); appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent mainPiIntent = PendingIntent.getActivity(mContext, 0, appIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(mainPiIntent); builder.setContentTitle(mContext .getString(R.string.update_download_title)); builder.setSmallIcon(R.drawable.ic_launcher); String text = String.format("%2d", progress) + "%"; rv.setTextViewText(R.id.notification_desc, text); builder.setContentText(text); builder.setWhen(System.currentTimeMillis()); builder.setOngoing(false); rv.setTextViewText(R.id.notification_title, mContext.getString(R.string.update_download_title)); if (progress != 100 && isSuccess) { rv.setViewVisibility(R.id.content_view_progress, View.VISIBLE); rv.setViewVisibility(R.id.notification_desc, View.GONE); builder.setOngoing(true); rv.setProgressBar(R.id.content_view_progress, 100, progress, false); } else if (isSuccess) { rv.setViewVisibility(R.id.notification_desc, View.VISIBLE); rv.setViewVisibility(R.id.content_view_progress, View.GONE); rv.setTextViewText(R.id.notification_desc, mContext.getString(R.string.update_download_ok_start_install)); } else { rv.setViewVisibility(R.id.notification_desc, View.VISIBLE); rv.setViewVisibility(R.id.content_view_progress, View.GONE); rv.setTextViewText(R.id.notification_desc, mContext.getString(R.string.update_download_faile_please_retry)); } rv.setTextViewText(R.id.notification_time, t1); builder.setContent(rv); builder.setTicker(mContext.getString(R.string.update_download_title)); Notification notification = builder.build(); notification.contentView = rv; manager.notify(DOWNLOAD_ID, notification);}public void startDownload() { if (run == false) { new Thread(this).start(); }}@Overridepublic void run() { super.run(); URL u; try { run = true; sendNotification(0, true); u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setConnectTimeout(5000); double fileSize = conn.getContentLength(); InputStream is = conn.getInputStream(); File pathFile = new File(path); if (!pathFile.exists()) { pathFile.mkdir(); } File file = new File(savePath); if (!file.exists()) { file.createNewFile(); } FileOutputStream fos = new FileOutputStream(file); BufferedInputStream bis = new BufferedInputStream(is); byte[] buffer = new byte[1024]; int len; double total = 0; double pcent = 0; while ((len = bis.read(buffer)) != -1) { fos.write(buffer, 0, len); total += len; double percent = (int) ((total * 100 / fileSize)); if (percent - pcent >= 1.0) { pcent = percent; sendNotification((int) percent, true); } } sendNotification(100, true); fos.close(); bis.close(); is.close(); installApk(file); manager.cancel(DOWNLOAD_ID); run = false; } catch (Exception e) { run = false; sendNotification(0, false); }}public String getUrl() { return url;}public void setUrl(String url) { this.url = url;}protected void installApk(File file) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); mContext.startActivity(intent);}
}
public class Constants {
public static final String ENTRY_ALL_PHOTO_FRAGMENT_NULL = "entry_all_photo_fragment_null" ;public static final String ENTRY_ALL_PHOTO_FRAGMENT_BIG_SIZE = "entry_all_photo_fragment_big_size" ;public static final String ENTRY_ALL_PHOTO_FRAGMENT_SIMILAR = "entry_all_photo_fragment_similar" ;public static final String ENTRY_ALL_PHOTO_FRAGMENT_NO_USE = "entry_all_photo_fragment_no_use" ;public static final String FULL_REMIND_CLOSED = "full_remind_closed";public static final String RIGHT_REMIND_CLOSED = "right_remind_closed";public static final String FULL_REMIND_FIRST_SHOW = "full_remind_first_show";public static final String RIGHT_REMIND_FIRST_SHOW = "right_remind_first_show";public static final String APPLICATION_FRIST_ARRANGE = "application_frist_arrange";
}
重点内容
- APP更新
- App更新
- app更新
- 更新app
- APP更新
- App更新
- App开发:强制更新app
- 更新app.Config
- 更新app版本
- App检测更新
- App Version更新提醒
- Android app更新模块
- app 检查版本更新
- Android App补丁更新
- IOS App更新
- ios app 版本更新
- APP版本更新
- 移动app 自我更新
- mysql-数据表操作2
- JavaSE 学习参考:switch使用举例
- 1063. Set Similarity (25)
- 简单算法———快速排序
- Yii redirect方法
- APP更新
- We Chall-Prime Factory-Writeup
- java.lang.System.getProperty("xxx")获取值
- [ACM_POJ_1163]动态规划入门练习(一)The Triangle
- 如何理解依赖倒置原则?
- maven
- 文章标题
- python 相关细节知识
- 使用秘钥无法ssh登陆