最近做了几个项目,花点时间沉淀一下学到的知识。

  1. 多线程下载文件及UI刷新
    断点续传下载文件网上的文章很多,在这里就不过多叙述了,在android里面控制UI的变化就比较麻烦了,用户在按下home键离开程序,再返回来,进度条的变化或者按钮的变化等等都要做出适当的控制,在用线程下载的时候,离开程序的时候线程并不会关闭,使用多个全局静态的handler,控制多个不同线程的UI刷新,可以实现相应的效果。(当然肯定还有更好的方式)
public static SparseArray<DownloadHandler> messageArray = new SparseArray<>();

DownloadHandler类

public class DownloadHandler extends Handler {private TextView btn;private static final int FINISH = 2;private static final int DOWNLOADING = 1;private static final int OPEN = 0;public void setBtn(TextView btn) {this.btn = btn;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case FINISH:btn.setText("打 开");//btn.setTextColor(Color.parseColor("#E8BB5B"));break;case DOWNLOADING:btn.setText("下载中...");btn.setClickable(false);//btn.setBackgroundColor(Color.parseColor("#969696"));break;case OPEN:break;}}
}

下载过程中发出Mesage,标记状态,下载完成时同理

 Message msg = new Message();msg.arg1 = position;Constant.NOTE_DOWNLOAD = DOWNLOADING;msg.what = Constant.NOTE_DOWNLOAD;Constant.messageArray.get(position).sendMessage(msg);
  1. 下载完成自动打开或安装
    文件下载完成后,会调用手机自带软件打开它或者安装它,代码如下
/*** 根据文件后缀名匹配MIMEType* @param file* @return*/public static String getMIMEType(File file) {String type ="*/*";String name = file.getName();int index = name.lastIndexOf('.');if (index < 0) {return type;}String end = name.substring(index,name.length()).toLowerCase();if (TextUtils.isEmpty(end)) return type;for (int i = 0;i < MIME_MapTable.length;i++) {if (end.equals(MIME_MapTable[i][0]))type = MIME_MapTable[i][1];}return type;}/*** 打开文件* @param context* @param file 文件*/public static void openFile(Context context,File file) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(Intent.ACTION_VIEW);String type= getMIMEType(file);//设置intent的data和Type属性。intent.setDataAndType(Uri.fromFile(file), type);context.startActivity(intent);}/*** 自动安装apk文件* @param context* @param file*/public static void openApk(Context context,File file) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");context.startActivity(intent);}private static final String[][] MIME_MapTable={{".3gp",    "video/3gpp"},{".apk",    "application/vnd.android.package-archive"},{".asf",    "video/x-ms-asf"},{".avi",    "video/x-msvideo"},{".bin",    "application/octet-stream"},{".bmp",    "image/bmp"},{".c",  "text/plain"},{".class",  "application/octet-stream"},{".conf",   "text/plain"},{".cpp",    "text/plain"},{".doc",    "application/msword"},{".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},{".xls",    "application/vnd.ms-excel"},{".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},{".exe",    "application/octet-stream"},{".gif",    "image/gif"},{".gtar",   "application/x-gtar"},{".gz", "application/x-gzip"},{".h",  "text/plain"},{".htm",    "text/html"},{".html",   "text/html"},{".jar",    "application/java-archive"},{".java",   "text/plain"},{".jpeg",   "image/jpeg"},{".jpg",    "image/jpeg"},{".js", "application/x-javascript"},{".log",    "text/plain"},{".m3u",    "audio/x-mpegurl"},{".m4a",    "audio/mp4a-latm"},{".m4b",    "audio/mp4a-latm"},{".m4p",    "audio/mp4a-latm"},{".m4u",    "video/vnd.mpegurl"},{".m4v",    "video/x-m4v"},{".mov",    "video/quicktime"},{".mp2",    "audio/x-mpeg"},{".mp3",    "audio/x-mpeg"},{".mp4",    "video/mp4"},{".mpc",    "application/vnd.mpohun.certificate"},{".mpe",    "video/mpeg"},{".mpeg",   "video/mpeg"},{".mpg",    "video/mpeg"},{".mpg4",   "video/mp4"},{".mpga",   "audio/mpeg"},{".msg",    "application/vnd.ms-outlook"},{".ogg",    "audio/ogg"},{".pdf",    "application/pdf"},{".png",    "image/png"},{".pps",    "application/vnd.ms-powerpoint"},{".ppt",    "application/vnd.ms-powerpoint"},{".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"},{".prop",   "text/plain"},{".rc", "text/plain"},{".rmvb",   "audio/x-pn-realaudio"},{".rtf",    "application/rtf"},{".sh", "text/plain"},{".tar",    "application/x-tar"},{".tgz",    "application/x-compressed"},{".txt",    "text/plain"},{".wav",    "audio/x-wav"},{".wma",    "audio/x-ms-wma"},{".wmv",    "audio/x-ms-wmv"},{".wps",    "application/vnd.ms-works"},{".xml",    "text/plain"},{".z",  "application/x-compress"},{".zip",    "application/x-zip-compressed"},{"",        "*/*"}};

android文件下载自动安装或打开相关推荐

  1. Android 下载APK 安装APK 打开APK

    今天有了一个这样的需求 :下载一个apk文件,然后当你下载完成后,按钮的文字发生改变,变成点击安装,然后安装完成之后,变成打开. 这是下载apk的方法: ? 1 2 3 4 5 6 7 8 9 10 ...

  2. android手机自动安装程序,手机自动安装软件怎么办

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 手机自动安装软件的解决方法是: 1.下载lbe大师. 2.下载完成之后,在手机上找到应用图标并且点击打开. 3.在首页的功能区看到 ...

  3. apk自动升级,高于android N自动安装不弹框的问题解决

    解决 apk自动升级,android高版本自动安装不弹框的问题 特别注意: File apkFile = new File(tempFile); Intent intent = new Intent( ...

  4. Android Accessibility自动安装app

    对于国内Android设备,应用的自动批量安装/更新一直是一个痛点,在之前,第三方应用商店通常要求设备Root,然后调用系统的PackageManagerService命令行来实现后台安装.最近,豌豆 ...

  5. Android 下载 自动安装 解析错误,studio下载APK到手机提示解析错误解决方法

    下载完Android studio,第一件事就是想写hello world,照着第一行代码,新建project,建立一个已经搭好框架的activity,make然后run,很快就执行完成,下图是在选择 ...

  6. android 市场自动安装软件,Android 应用中跳转到应用市场评分示例

    在开发Android App过程中,经常会遇见这样的功能.从当前的app跳转到一个应用商店并且跳转到自己app的详情页面,让用户给自己的App进行评分.评价,从而提高自己App的排名.下面介绍三种方法 ...

  7. android mmi自动安装,Android平台MMI自动化测试工具通信协议.pdf

    File name: Android 平台MMI 自动化测试工具通信协议 Version: V1.0 Date:2013/03/07 Author: Min Liu Android 平台MMI 自动化 ...

  8. android mimi自动安装,mimisys pack v0.1

    一个压缩壳! --------------------------------------------- mimisys pack 是一个驱动简单文件壳. 驱动文件的处理比 r3 简单很多,许多不要关 ...

  9. Android Studio 如何 安装 HAXM

    Android Studio 如何 安装 HAXM 打开 Android Stutio 打开设置 搜索 Android,定位到 Android SDK 切换到 SKD Tools 标签,然后点选下面的 ...

最新文章

  1. 简单介绍python装饰器
  2. php功能与特性,PHP 6将实现的8个特性和功能
  3. 3-5:常见任务和主要工具之归档和备份
  4. cli版的php.ini路径,CLI 执行 PHP 时自订 php.ini 设定档
  5. 解决chm文件打开,无显示内容
  6. 计算机打不出汉字怎么办,电脑打不出字怎么办,教您电脑打不出字怎么解决
  7. 如何简单快速的修改Bootstrap
  8. 六石管理学:谈谈工作技能培训
  9. 条件语句的if语句的5种替代方法
  10. cpci无法检索_CPCI检索是什么意思
  11. 页面提示以及页面刷新
  12. 小米6线刷+开发版+root
  13. html5兼容问题,【HTML5分享】关于浏览器的兼容问题
  14. 买车容易行路难-买车
  15. 宇宙精密调治的再思《基督教与科学》第二十三课
  16. condaerror unable to create prefix directory check that you have sufficient permissions
  17. 【Python】unicode编码和bytes编码不能混用
  18. Shell命令-文件及目录操作之pwd、rm
  19. C# button按键无反应
  20. pyqt5 QPainter绘制图形,并旋转

热门文章

  1. 微信公众号客服接口给指定用户openid发送消息
  2. 中国消毒柜行业市场深度调研及投资策略预测报告
  3. 胸部肌肉训练(附图)
  4. OMAP3530 LCD移植(最简单的移植方式)
  5. 使用VMware搭建3台一模一样的Linux虚拟机
  6. RobotToolBox-Python(RTB-P)学习小结
  7. 10家互联网大厂的中秋礼盒,你最钟意哪一家?
  8. 今天给大家分享使用Scratch做一个单机版足球赛的游戏!
  9. 朗新科技 安卓开发工程师 校招一面面经
  10. setup_machine_fdt