Android很全常用工具类源码

时间:2018-03-05 04:23:59
【文件属性】:

文件名称:Android很全常用工具类源码

文件大小:39KB

文件格式:ZIP

更新时间:2018-03-05 04:23:59

常用工具类

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; } }


【文件预览】:
Android很全常用工具类源码
----ArrayUtils.java.txt(7KB)
----ObjectUtils.java.txt(4KB)
----ShellUtils.java.txt(8KB)
----FileUtils.java.txt(20KB)
----TimeUtils.java.txt(2KB)
----PackageUtils.java.txt(31KB)
----ResourceUtils.java.txt(5KB)
----SerializeUtils.java.txt(3KB)
----JSONUtils.java.txt(27KB)
----ImageUtils.java.txt(8KB)
----DownloadManagerPro.java.txt(14KB)
----ListUtils.java.txt(8KB)
----RandomUtils.java.txt(8KB)
----SystemUtils.java.txt(1KB)
----HttpUtils.java.txt(20KB)
----StringUtils.java.txt(9KB)
----MapUtils.java.txt(10KB)
----ParcelUtils.java.txt(5KB)
----PreferencesUtils.java.txt(10KB)

网友评论