同一个应用安装时的类型却不同
2015-12-15 10:26
417 查看
这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");
}
}
}
分析:
在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");
}
}
}
相关文章推荐
- iOS拨打电话功能的实现
- onload和ready的区别
- STL sort()
- 开启或者关闭软键盘的工具类
- Android处理日期
- Ubuntu下远程访问MySQL数据库
- 最好的Python机器学习库
- 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- pdf转png
- CSS3 Box-shadow
- 采用dlopen、dlsym、dlclose加载动态链接库
- [Leetcode]Populating Next Right Pointers in Each Node
- Android Studio基础之生成Apk(六)-学习篇
- Can't use Subversion command line client: svn.
- What We Talk About When We Talk About Distributed Systems
- Assert和Enumeration的用法
- 12月12日全球域名商保有量及市场份额排行榜16强
- Win10/UWP开发—凭据保险箱PasswordVault
- String与InputStream相互转换
- OS X EL Capitan U盘安装制作