判断sd卡是否存在APP是不是安装在SD卡上面

奇酷手机不知道支不支持将APP应用安装至SD卡中。_360手机社区
奇酷手机不知道支不支持将APP应用安装至SD卡中。,好像没有人提到这个问题 求真相
社区服务员
亲,你用的是奇酷青春版吗?
& &青春版现在是不支持插sd卡的。{:11_259:}
可以在存储-位置选择中修改安装到SD卡。
亲,你用的是奇酷青春版吗?
& &青春版现在是不支持插sd卡的。亲,是可以插SD卡的呦!
不管他能不能安装内存卡 我要说的是 把应用安装到内存卡 大量的读写 内存卡特别容易损坏。
有这么大内存,再移动到sd卡中也没意义
来自H30-T10(360手机社区1.4.7版)
360手机社区客户端下载> 博客详情
&&&&如下就是一个工具类,其作用是采用递归扫描SD卡上的apk文件,判断该应用是否在手机上安装过,如果安装过再去判断是否可以升级。具体代码如下:
* 获取手机上apk文件信息类,主要是判断是否安装再手机上了,安装的版本比较现有apk版本信息
public class ApkSearchUtils {
private static int INSTALLED = 0; // 表示已经安装,且跟现在这个apk文件是一个版本
private static int UNINSTALLED = 1; // 表示未安装
private static int INSTALLED_UPDATE =2; // 表示已经安装,版本比现在这个版本要低,可以点击按钮更新
private List&MyFile& myFiles = new ArrayList&MyFile&();
public List&MyFile& getMyFiles() {
return myF
public void setMyFiles(List&MyFile& myFiles) {
this.myFiles = myF
public ApkSearchUtils(Context context) {
this.context =
* @param args
运用递归的思想,递归去找每个目录下面的apk文件
public void FindAllAPKFile(File file) {
// 手机上的文件,目前只判断SD卡上的APK文件
// file = Environment.getDataDirectory();
// SD卡上的文件目录
if (file.isFile()) {
String name_s = file.getName();
MyFile myFile = new MyFile();
String apk_path =
// MimeTypeMap.getSingleton()
if (name_s.toLowerCase().endsWith(".apk")) {
apk_path = file.getAbsolutePath();// apk文件的绝对路劲
// System.out.println("----" + file.getAbsolutePath() + "" +
// name_s);
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = pm.getPackageArchiveInfo(apk_path, PackageManager.GET_ACTIVITIES);
ApplicationInfo appInfo = packageInfo.applicationI
/**获取apk的图标 */
appInfo.sourceDir = apk_
appInfo.publicSourceDir = apk_
Drawable apk_icon = appInfo.loadIcon(pm);
myFile.setApk_icon(apk_icon);
/** 得到包名 */
String packageName = packageInfo.packageN
myFile.setPackageName(packageName);
/** apk的绝对路劲 */
myFile.setFilePath(file.getAbsolutePath());
/** apk的版本名称 String */
String versionName = packageInfo.versionN
myFile.setVersionName(versionName);
/** apk的版本号码 int */
int versionCode = packageInfo.versionC
myFile.setVersionCode(versionCode);
/**安装处理类型*/
int type = doType(pm, packageName, versionCode);
myFile.setInstalled(type);
Log.i("ok", "处理类型:"+String.valueOf(type)+"\n" + "------------------我是纯洁的分割线-------------------");
myFiles.add(myFile);
// String apk_app = name_s.substring(name_s.lastIndexOf("."));
File[] files = file.listFiles();
if (files != null && files.length & 0) {
for (File file_str : files) {
FindAllAPKFile(file_str);
* 判断该应用是否在手机上已经安装过,有以下集中情况出现
* 1.未安装,这个时候按钮应该是“安装”点击按钮进行安装
* 2.已安装,按钮显示“已安装” 可以卸载该应用
* 3.已安装,但是版本有更新,按钮显示“更新” 点击按钮就安装应用
* 判断该应用在手机中的安装情况
* @param pm
PackageManager
* @param packageName
要判断应用的包名
* @param versionCode
要判断应用的版本号
private int doType(PackageManager pm, String packageName, int versionCode) {
List&PackageInfo& pakageinfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo pi : pakageinfos) {
String pi_packageName = pi.packageN
int pi_versionCode = pi.versionC
//如果这个包名在系统已经安装过的应用中存在
if(packageName.endsWith(pi_packageName)){
//Log.i("test","此应用安装过了");
if(versionCode==pi_versionCode){
Log.i("test","已经安装,不用更新,可以卸载该应用");
return INSTALLED;
}else if(versionCode&pi_versionCode){
Log.i("test","已经安装,有更新");
return INSTALLED_UPDATE;
Log.i("test","未安装该应用,可以安装");
return UNINSTALLED;
如果有人看到并且指出上述代码不足支出,非常感谢!
人打赏支持
码字总数 9540
MyFile只是一个model类,几个属性都可以看的出来,可以自己补充这个类,源码丢失了。
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥经验2464 米
在线时间25 小时
版本7.5.12
机型小米手机5
签到次数161
MIUI版本7.5.12
红米手机2 TD
下载的APP安装包能不能默认存放于外置SD卡中?这红米2系统存储本来就捉急,你下一堆安装包都存在系统存储目录,本来可以升级的,就因为空间被占用了,提示存储空间不足,停止升级!有些[河蟹词语]啊!真的!这么整,米粉受不了!!!
screenshot_0_2.jpg (204.68 KB, 下载次数: 0)
screenshot_1_3.jpg (97.91 KB, 下载次数: 0)
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号大家会不会一开微信就提示sd已拔出,但是安装在sd卡上的app仍可以运行?一开微信搞到其他app(例如)都用不了sd卡。
全部答案(共1个回答)
内,但是他的缓存之类的却是在SD卡内存储的.有可能手机的SD卡插槽内的金手指不灵了.
把你的SD卡放到其他手机或读卡器与电脑连接,看有否提示,如果问题依旧,说明你的SD是已损坏,如果没有问题,说明你的手机有问题,或者SD卡与手机接触不良。
显示了SD卡空白或无文件系统,sd卡损坏,或手机读卡错误,换部手机不行的话,就格式化sd卡吧
还能恢复,把sd卡接到电脑上,从网上下载一个数据恢复精灵,然后进入“恢复整个磁盘的文件”功能,扫描你的sd卡,然后在扫描结果里找一下有没有你需要的文件。
如果没有格式话内存卡 内存卡东西应该还在 你可以把内存卡取下来格式化
如果我的回答对您有帮助,请设置“对我有用”谢谢!
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区判断apk是否安装的sd卡,还是手机内存 -
- ITeye技术网站
博客分类:
一、判断apk是否安装的sd卡,还是手机内存
PackageInfo = ctx.getPackageManager().getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES)
boolean isSdcard = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)!=0 ; //判断当前APP是否安装的SD卡里面
为true则,Apk安装的SD卡里
* Checks if the application is installed on the SD card.
* @return &code&true&/code& if the application is installed on the sd card
public static boolean isInstalledOnSdCard() {
Context context = App.getContext();
// check for API level 8 and higher
if (VERSION.SDK_INT & android.os.Build.VERSION_CODES.ECLAIR_MR1) {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
ApplicationInfo ai = pi.applicationI
return (ai.flags & FLAG_EXTERNAL_STORAGE) == FLAG_EXTERNAL_STORAGE;
} catch (NameNotFoundException e) {
// check for API level 7 - check files dir
String filesDir = context.getFilesDir().getAbsolutePath();
if (filesDir.startsWith("/data/")) {
} else if (filesDir.contains("/mnt/") || filesDir.contains("/sdcard/")) {
} catch (Throwable e) {
三、当SD卡除掉时,获得已安装在SD卡上面的apk的时候,图标不能显示,
这时判断是否应用不能用的方法:
String path = packageInfo.applicationInfo.sourceD
if(isSdcard && path != null && !new File(path).exists() ){
}else if(appInfo!=null){
//正常逻辑}
浏览: 222379 次
来自: 北京
这个一定要顶得高高的。
Good job, Thank you so much!}

我要回帖

更多关于 怎么判断sd卡是否烧了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信