文档章节

android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or APK文件看过了)

补全
 补全
发布于 2014/01/19 17:03
字数 734
阅读 4354
收藏 3

如果你是apk或者android系统可以识别的问题,那么一定是服务器MIME文件类型没有配置正确

APK文件配置如下:

<mime-mapping>
        <extension>apk</extension>
        <mime-type>applicationnd/vnd.android.package-archive</mime-type>
</mime-mapping>



    其他文件请参考MIME配置对照表


下面是android不能下载自定义文件或者不能识别问题的解决方案。


Android的默认浏览器,在下载文件时,会验证MimeType,如果这个MimeType不被识别,那么Download Manager会拒绝对其进行下载。Download Crutch可以让Download Manager不管是否是可识别的MimeType都进行下载。
凡是挂入系统的应用,总让人觉得很神奇。而Download Crutch这个小软件,更是实现的非常巧妙,理论上讲,它可以一行代码都不写就实现这个功能。
想要探究Download Crutch的工作原理,我们就要从BrowserDownload Manager的工作原理说起。

Browser的核心是WebView组件,它负责处理所有WebView可以接受(或者说显示)的文件类型。比如HTML页面,或者各种 Image。当WebView遇到一个他不认识的MimeType时,比如application/zip,它就会把它提交给 DownloadManager,请求DownloadManager进行下载。
  DownloadManager在接收到下载请求的时候,并会立 即启动HTTP线程进行下载,它先会构造一个Intent,询问系统内是否有某个应用程序对这个要下载的文件类型该兴趣(或者说,可以在下载后处理这种文 件类型)。如果回应的结果是没有哪个应用程序处理这个MimeType,那么DownloadManager会拒绝下载这个文件。关键代码如下:

/*
 * file: DownloadService.java
 * package: com.android.providers.downloads
 */
  Intent mimetypeIntent = new Intent(Intent.ACTION_VIEW);
  mimetypeIntent.setDataAndType(Uri.fromParts("file", "", null), info.mimetype);
  ResolveInfo ri = getPackageManager().resolveActivity(mimetypeIntent,
  PackageManager.MATCH_DEFAULT_ONLY);
  //如果找不到ResolveInfo,则认为没有应用程序可以处理这种mimetype。
  //下载工作将被终止
  if (ri == null) {
      ……
      return;
  }




所以,要想解决DownloadManager拒绝下载的问题,只需要编写一个应用程序,告诉系统所有的MimeType我都能处理,你就尽管下吧。于是就诞生了DownloadCrutch。
要实现DownloadCrutch的功能,只需要建立一个Android Project,编写一个空的Activity,命名为DownloadCrutch,并且在AndroidManifest.xml里进行注册。关键代码如下


<activity android:name=".DownloadCrutch">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="file" />
                <data android:mimeType="*/*" />
            </intent-filter>
        </activity>



其中,android:scheme标记对file://xxxxxURI结构进行处理,android:mimeType标记可以处理任意类型的文件。

 现在你的文件能默认浏览器下载下来了,你打开文件后就会条跳转到DownloadCrutch这个activity,后面就需要自己编写代码处理文件了。

© 著作权归作者所有

补全
粉丝 19
博文 27
码字总数 4103
作品 0
福州
高级程序员
私信 提问
实谈微信内置浏览器无法打开app下载页的解决办法,生成微信跳转链接

想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况。通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1、网...

wty13
04/02
0
0
微信公众号手机无法直接下载APK文件是怎么回事

需求:在微信h5页面中下载第三方app —— 安卓, 直接下载apk文件包;iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否...

五分可爱
05/08
0
0
【前端帮帮忙】第6期 移动端使用video标签需要注意的一些问题

相信使用过标签的都知道,标签在pc端跟手机端显示的样式并不一样,而且还有个很蛋疼的就是微信中内置的浏览器,播放的时候会自动全屏问题。 接下来我们通过例子来分析下使用过程中可能碰到的...

大志_前端
05/10
0
0
微信不支持打开下载APK(APP)下载链接的应对方案

大家是不是经常会遇到微信内点击链接或扫描二维码无法打开指定网页的问题?只要你使用微信转发分享,相信你就一定会遇到,那么打不开的原因很简单了,就是被微信拦截了。这个问题我们只需要实...

三尺之剑丶
03/30
0
0
手机微信打开页面下载APP时怎么自动调用其他浏览器下载

想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况。通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1、网...

过往云烟1
04/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员Java教程分享Zookeeper基本原理与运用场景

好程序员Java教程分享Zookeeper基本原理与运用场景一、什么是Zookeeper? zookeeper是一个分布式的一致性协调服务。 换句话说,也可以把zookeeper看成一个小型的分布式文件系统。但是和FastD...

好程序员官网
5分钟前
2
0
mysql表情符

1 修改表字段为utf8md4 ALTER table property_info MODIFY `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL 2 MySQL数据库服务器配置文件mysqld.cn......

干死it
25分钟前
2
0
正则表达式的基本语法

本文摘自LTP.NET知识库。 正则表达式的形式一般如下: /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。 用户只要把希望查找匹配对象的模式内容放入“/”定界符之...

木庄
27分钟前
3
0
java 框架有哪些?

十大常用框架: 一、SpringMVC 二、Spring 三、Mybatis 四、Dubbo 五、Maven 六、RabbitMQ 七、Log4j 八、Ehcache 九、Redis 十、Shiro 延展阅读: 一、SpringMVC Spring Web MVC是一种基于J...

java框架开发者
27分钟前
6
0
细谈Mysql事务

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,...

程序猿周先森
36分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部