android文件下载自动安装或打开
最近做了几个项目,花点时间沉淀一下学到的知识。
- 多线程下载文件及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);
- 下载完成自动打开或安装
文件下载完成后,会调用手机自带软件打开它或者安装它,代码如下
/*** 根据文件后缀名匹配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文件下载自动安装或打开相关推荐
- Android 下载APK 安装APK 打开APK
今天有了一个这样的需求 :下载一个apk文件,然后当你下载完成后,按钮的文字发生改变,变成点击安装,然后安装完成之后,变成打开. 这是下载apk的方法: ? 1 2 3 4 5 6 7 8 9 10 ...
- android手机自动安装程序,手机自动安装软件怎么办
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 手机自动安装软件的解决方法是: 1.下载lbe大师. 2.下载完成之后,在手机上找到应用图标并且点击打开. 3.在首页的功能区看到 ...
- apk自动升级,高于android N自动安装不弹框的问题解决
解决 apk自动升级,android高版本自动安装不弹框的问题 特别注意: File apkFile = new File(tempFile); Intent intent = new Intent( ...
- Android Accessibility自动安装app
对于国内Android设备,应用的自动批量安装/更新一直是一个痛点,在之前,第三方应用商店通常要求设备Root,然后调用系统的PackageManagerService命令行来实现后台安装.最近,豌豆 ...
- Android 下载 自动安装 解析错误,studio下载APK到手机提示解析错误解决方法
下载完Android studio,第一件事就是想写hello world,照着第一行代码,新建project,建立一个已经搭好框架的activity,make然后run,很快就执行完成,下图是在选择 ...
- android 市场自动安装软件,Android 应用中跳转到应用市场评分示例
在开发Android App过程中,经常会遇见这样的功能.从当前的app跳转到一个应用商店并且跳转到自己app的详情页面,让用户给自己的App进行评分.评价,从而提高自己App的排名.下面介绍三种方法 ...
- android mmi自动安装,Android平台MMI自动化测试工具通信协议.pdf
File name: Android 平台MMI 自动化测试工具通信协议 Version: V1.0 Date:2013/03/07 Author: Min Liu Android 平台MMI 自动化 ...
- android mimi自动安装,mimisys pack v0.1
一个压缩壳! --------------------------------------------- mimisys pack 是一个驱动简单文件壳. 驱动文件的处理比 r3 简单很多,许多不要关 ...
- Android Studio 如何 安装 HAXM
Android Studio 如何 安装 HAXM 打开 Android Stutio 打开设置 搜索 Android,定位到 Android SDK 切换到 SKD Tools 标签,然后点选下面的 ...
最新文章
- 简单介绍python装饰器
- php功能与特性,PHP 6将实现的8个特性和功能
- 3-5:常见任务和主要工具之归档和备份
- cli版的php.ini路径,CLI 执行 PHP 时自订 php.ini 设定档
- 解决chm文件打开,无显示内容
- 计算机打不出汉字怎么办,电脑打不出字怎么办,教您电脑打不出字怎么解决
- 如何简单快速的修改Bootstrap
- 六石管理学:谈谈工作技能培训
- 条件语句的if语句的5种替代方法
- cpci无法检索_CPCI检索是什么意思
- 页面提示以及页面刷新
- 小米6线刷+开发版+root
- html5兼容问题,【HTML5分享】关于浏览器的兼容问题
- 买车容易行路难-买车
- 宇宙精密调治的再思《基督教与科学》第二十三课
- condaerror unable to create prefix directory check that you have sufficient permissions
- 【Python】unicode编码和bytes编码不能混用
- Shell命令-文件及目录操作之pwd、rm
- C# button按键无反应
- pyqt5 QPainter绘制图形,并旋转