您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Android很全常用工具类源码
  所属分类: Android
  开发工具:
  文件大小: 39kb
  下载次数: 0
  上传时间: 2015-02-13
  提 供 者: yang*****
 详细说明: Android系统下载管理DownloadManager增强方法,可用于包括获取下载相关信息,如: getStatusById(long) 得到下载状态 getDownloadBytes(long) 得到下载进度信息 getBytesAndStatus(long) 得到下载进度信息和状态 getFileName(long) 得到下载文件路径 getUri(long) 得到下载uri getReason(long) 得到下载失败或暂停原因 getPausedReason(long) 得到下载暂停原因 getErrorCode(long) 得到下载错误码 =================================================================== package cn.trinea.android.common.util; import java.lang.reflect.Method; import android.app.DownloadManager; import android.app.DownloadManager.Request; import android.database.Cursor; import android.net.Uri; import android.os.Build; /** * DownloadManagerPro *
    * Get download info *
  • {@link #getStatusById(long)} get download status
  • *
  • {@link #getDownloadBytes(long)} get downloaded byte, total byte
  • *
  • {@link #getBytesAndStatus(long)} get downloaded byte, total byte and download status
  • *
  • {@link #getFileName(long)} get download file name
  • *
  • {@link #getUri(long)} get download uri
  • *
  • {@link #getReason(long)} get failed code or paused reason
  • *
  • {@link #getPausedReason(long)} get paused reason
  • *
  • {@link #getErrorCode(long)} get failed error code
  • *
*
    * Operate download *
  • {@link #isExistPauseAndResumeMethod()} whether exist pauseDownload and resumeDownload method in * {@link DownloadManager}
  • *
  • {@link #pauseDownload(long...)} pause download. need pauseDownload(long...) method in {@link DownloadManager}
  • *
  • {@link #resumeDownload(long...)} resume download. need resumeDownload(long...) method in {@link DownloadManager}
  • *
*
    * RequestPro *
  • {@link RequestPro#setNotiClass(String)} set noti class
  • *
  • {@link RequestPro#setNotiExtras(String)} set noti extras
  • *
* * @author Trinea 2013-5-4 */ public class DownloadManagerPro { public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads"); /** represents downloaded file above api 11 **/ public static final String COLUMN_LOCAL_FILENAME = "local_filename"; /** represents downloaded file below api 11 **/ public static final String COLUMN_LOCAL_URI = "local_uri"; public static final String METHOD_NAME_PAUSE_DOWNLOAD = "pauseDownload"; public static final String METHOD_NAME_RESUME_DOWNLOAD = "resumeDownload"; private static boolean isInitPauseDownload = false; private static boolean isInitResumeDownload = false; private static Method pauseDownload = null; private static Method resumeDownload = null; private DownloadManager downloadManager; public DownloadManagerPro(DownloadManager downloadManager) { this.downloadManager = downloadManager; } /** * get download status * * @param downloadId * @return */ public int getStatusById(long downloadId) { return getInt(downloadId, DownloadManager.COLUMN_STATUS); } /** * get downloaded byte, total byte * * @param downloadId * @return a int array with two elements *
    *
  • result[0] represents downloaded bytes, This will initially be -1.
  • *
  • result[1] represents total bytes, This will initially be -1.
  • *
*/ public int[] getDownloadBytes(long downloadId) { int[] bytesAndStatus = getBytesAndStatus(downloadId); return new int[] {bytesAndStatus[0], bytesAndStatus[1]}; } /** * get downloaded byte, total byte and download status * * @param downloadId * @return a int array with three elements *
    *
  • result[0] represents downloaded bytes, This will initially be -1.
  • *
  • result[1] represents total bytes, This will initially be -1.
  • *
  • result[2] represents download status, This will initially be 0.
  • *
*/ public int[] getBytesAndStatus(long downloadId) { int[] bytesAndStatus = new int[] {-1, -1, 0}; DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId); Cursor c = null; try { c = downloadManager.query(query); if (c != null && c.moveToFirst()) { bytesAndStatus[0] = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); bytesAndStatus[1] = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); bytesAndStatus[2] = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); } } finally { if (c != null) { c.close(); } } return bytesAndStatus; } /** * pause download * * @param ids the IDs of the downloads to be paused * @return the number of downloads actually paused, -1 if exception or method not exist */ public int pauseDownload(long... ids) { initPauseMethod(); if (pauseDownload == null) { return -1; } try { return ((Integer)pauseDownload.invoke(downloadManager, ids)).intValue(); } catch (Exception e) { /** * accept all exception, include ClassNotFoundException, NoSuchMethodException, InvocationTargetException, * NullPointException */ e.printStackTrace(); } return -1; } /** * resume download * * @param ids the IDs of the downloads to be resumed * @return the number of downloads actually resumed, -1 if exception or method not exist */ public int resumeDownload(long... ids) { initResumeMethod(); if (resumeDownload == null) { return -1; } try { return ((Integer)resumeDownload.invoke(downloadManager, ids)).intValue(); } catch (Exception e) { /** * accept all exception, include ClassNotFoundException, NoSuchMethodException, InvocationTargetException, * NullPointException */ e.printStackTrace(); } return -1; } /** * whether exist pauseDownload and resumeDownload method in {@link DownloadManager} * * @return */ public static boolean isExistPauseAndResumeMethod() { initPauseMethod(); initResumeMethod(); return pauseDownload != null && resumeDownload != null; } private static void initPauseMethod() { if (isInitPauseDownload) { return; } isInitPauseDownload = true; try { pauseDownload = DownloadManager.class.getMethod(METHOD_NAME_PAUSE_DOWNLOAD, long[].class); } catch (Exception e) { // accept all exception e.printStackTrace(); } } private static void initResumeMethod() { if (isInitResumeDownload) { return; } isInitResumeDownload = true; try { resumeDownload = DownloadManager.class.getMethod(METHOD_NAME_RESUME_DOWNLOAD, long[].class); } catch (Exception e) { // accept all exception e.printStackTrace(); } } /** * get download file name * * @param downloadId * @return */ public String getFileName(long downloadId) { return getString(downloadId, (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? COLUMN_LOCAL_URI : COLUMN_LOCAL_FILENAME)); } /** * get download uri * * @param downloadId * @return */ public String getUri(long downloadId) { return getString(downloadId, DownloadManager.COLUMN_URI); } /** * get failed code or paused reason * * @param downloadId * @return
    *
  • if status of downloadId is {@link DownloadManager#STATUS_PAUSED}, return * {@link #getPausedReason(long)}
  • *
  • if status of downloadId is {@link DownloadManager#STATUS_FAILED}, return {@link #getErrorCode(long)}
  • *
  • if status of downloadId is neither {@link DownloadManager#STATUS_PAUSED} nor * {@link DownloadManager#STATUS_FAILED}, return 0
  • *
*/ public int getReason(long downloadId) { return getInt(downloadId, DownloadManager.COLUMN_REASON); } /** * get paused reason * * @param downloadId * @return
    *
  • if status of downloadId is {@link DownloadManager#STATUS_PAUSED}, return one of * {@link DownloadManager#PAUSED_WAITING_TO_RETRY}
    * {@link DownloadManager#PAUSED_WAITING_FOR_NETWORK}
    * {@link DownloadManager#PAUSED_QUEUED_FOR_WIFI}
    * {@link DownloadManager#PAUSED_UNKNOWN}
  • *
  • else return {@link DownloadManager#PAUSED_UNKNOWN}
  • *
*/ public int getPausedReason(long downloadId) { return getInt(downloadId, DownloadManager.COLUMN_REASON); } /** * get failed error code * * @param downloadId * @return one of {@link DownloadManager#ERROR_*} */ public int getErrorCode(long downloadId) { return getInt(downloadId, DownloadManager.COLUMN_REASON); } public static class RequestPro extends DownloadManager.Request { public static final String METHOD_NAME_SET_NOTI_CLASS = "setNotiClass"; public static final String METHOD_NAME_SET_NOTI_EXTRAS = "setNotiExtras"; private static boolean isInitNotiClass = false; private static boolean isInitNotiExtras = false; private static Method setNotiClass = null; private static Method setNotiExtras = null; /** * @param uri the HTTP URI to download. */ public RequestPro(Uri uri) { super(uri); } /** * set noti class, only init once * * @param className full class name */ public void setNotiClass(String className) { synchronized (this) { if (!isInitNotiClass) { isInitNotiClass = true; try { setNotiClass = Request.class.getMethod(METHOD_NAME_SET_NOTI_CLASS, CharSequence.class); } catch (Exception e) { // accept all exception e.printStackTrace(); } } } if (setNotiClass != null) { try { setNotiClass.invoke(this, className); } catch (Exception e) { /** * accept all exception, include ClassNotFoundException, NoSuchMethodException, * InvocationTargetException, NullPointException */ e.printStackTrace(); } } } /** * set noti extras, only init once * * @param extras */ public void setNotiExtras(String extras) { synchronized (this) { if (!isInitNotiExtras) { isInitNotiExtras = true; try { setNotiExtras = Request.class.getMethod(METHOD_NAME_SET_NOTI_EXTRAS, CharSequence.class); } catch (Exception e) { // accept all exception e.printStackTrace(); } } } if (setNotiExtras != null) { try { setNotiExtras.invoke(this, extras); } catch (Exception e) { /** * accept all exception, include ClassNotFoundException, NoSuchMethodException, * InvocationTargetException, NullPointException */ e.printStackTrace(); } } } } /** * get string column * * @param downloadId * @param columnName * @return */ private String getString(long downloadId, String columnName) { DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId); String result = null; Cursor c = null; try { c = downloadManager.query(query); if (c != null && c.moveToFirst()) { result = c.getString(c.getColumnIndex(columnName)); } } finally { if (c != null) { c.close(); } } return result; } /** * get int column * * @param downloadId * @param columnName * @return */ private int getInt(long downloadId, String columnName) { DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId); int result = -1; Cursor c = null; try { c = downloadManager.query(query); if (c != null && c.moveToFirst()) { result = c.getInt(c.getColumnIndex(columnName)); } } finally { if (c != null) { c.close(); } } return result; } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 常用工具类
 输入关键字,在本站1000多万海量源码库中尽情搜索: