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

来源:互联网 发布:教学软件下载 编辑:程序博客网 时间:2024/06/07 04:45

这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");
}
 

}

}


0 0
原创粉丝点击