您的位置:首页 > 其它

同一个应用安装时的类型却不同

2015-12-15 10:26 344 查看
这2天碰到一个问题,从一个客户预制的应用商店下载的apk,从文件管理这个路径可以正常安装,但是从downloadProvider这里却安装不了,

分析:

在filemanager和downloadprovider两处解析出的mimetype不一样,

在filemanager代码里,查看mimetype类型是:application/vnd.android.package-archive,

而在downloadprovider代码里,查看mimetype类型是:application/octet-stream,

通过比对mimetype的属性表,也就是文件:mime_types.properties 路径在:\code\LINUX\android\packages\apps\CMFileManager\res\raw目录下,

。。。

# Application

apk   = APP      | application/vnd.android.package-archive | fso_type_app_drawable

pkg   = APP      | application/octet-stream                | fso_type_app_drawable

deb   = APP      | application/x-debian-package            | fso_type_app_drawable

udeb  = APP      | application/x-debian-package            | fso_type_app_drawable

msi   = APP      | application/x-msdownload                | fso_type_app_drawable

rpm   = APP      | application/x-rpm                       | fso_type_app_drawable

。。。

只有mime是这个类型 application/vnd.android.package-archive 才是能正常安装的apk。

至于,同一个应用为什么在downloadprovider里面解析出不一样的mimetype,还在分析,这里先做个笔记,后面补充。

接着前面的问题描述,下面是解决方法:

mimetype不同的原因是,在downloadprovider这里,当从网络下载一个应用,在把它写进数据库库时,会去设置它的mimetype,

所以修改方法是在写入数据库时,写入mimetype的值

 DownloadProvider.java{

public Uri insert(final Uri uri, final ContentValues values) {

String uriStr =  values.getAsString(Downloads.Impl.COLUMN_URI);
String fileNameStr =  values.getAsString(Downloads.Impl.COLUMN_FILE_NAME_HINT);
if(uriStr.endsWith(".apk") || fileNameStr.endsWith(".apk")){
filteredValues.put(Downloads.Impl.COLUMN_MIME_TYPE,"application/vnd.android.package-archive");


}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: