如果你是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,后面就需要自己编写代码处理文件了。

更多相关文章

  1. 使用InjectView和findViewById说拜拜
  2. 分享七个非常有用的Android开发工具和工具包
  3. Android(安卓)高手进阶教程(十三)之----Android(安卓)数据库SQLi
  4. Android(cacerts.bks)添加根证书
  5. android studio查看genymotion模拟器上文件目录
  6. Cordova插件编写流程(Android平台)
  7. Android之service一些基础回顾
  8. Android签名文件转化为pk8和pem的实现
  9. Android(安卓)多分包,方法数超出 65536 限制

随机推荐

  1. Android(安卓)自定义View 新年烟花、横幅
  2. Android仿ios年龄滚轮大全
  3. Android中传送序列化对象出现的ClassNotF
  4. 新浪微博开放平台开发-android客户端(3)
  5. 浅谈Android引用计数(1)
  6. android消息处理机制学习(四)-AsyncTask的
  7. Android开发之旅:应用程序基础及组件
  8. Android(安卓)Bluetooth 4.0深入学习
  9. Android字符串进阶:字体属性及测量(FontMet
  10. ANDROID音频系统散记之五:如何绕开多媒体