Android如何判断应用程序是安装在手机内存中还是SD卡

[java]  view plain  copy
  1. /** 
  2.   * 判断包名所对应的应用是否安装在SD卡上 
  3.   * @param packageName 
  4.   * @return, true if install on SD card   
  5.   */  
  6. public static boolean isInstallOnSDCard(String packageName) {  
  7. PackageManager pm = LauncherApplication.getApp().getPackageManager();  
  8. ApplicationInfo appInfo;  
  9. try {  
  10. appInfo = pm.getApplicationInfo(packageName, 0);  
  11.   
  12. if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {  
  13. return true;  
  14. }  
  15. catch (NameNotFoundException e) {  
  16. e.printStackTrace();  
  17. }  
  18.   
  19. return false;  
  20. }  


android 程序怎么默认或者说允许安装到sd卡


要声明权限

Java code
   
   
1 . < android > 2 . < manifestAdditions > 3 . <! [CDATA[ 4 . < manifest android:installLocation = " auto " > 5 . < uses - permission android:name = " android.permission.INTERNET " /> 6 . </ manifest > 7 . ]] > 8 . </ manifestAdditions > 9 . </ android >

其中: android:installLocation="auto"代表默认安装到内置存储器中,但是允许用户把它转移到SD卡上。
而如果需要默认安装在SD卡上,只需要  
Java code
   
   
< manifest android:installLocation = " preferExternal " > ... </ manifest >

不过提醒你,安装在SD卡上有时候会出现莫名的问题



http://www.cnblogs.com/Lefter/archive/2012/03/07/2383962.html

在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置.

android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示:

<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;"><span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5;"><manifest </span><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">xmlns:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#nspace" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />          </span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#package" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">package</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span style="margin: 0px; padding: 0px;"><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">string</span></span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />          </span><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#uid" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">sharedUserId</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span style="margin: 0px; padding: 0px;"><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">string</span></span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />          </span><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#uidlabel" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">sharedUserLabel</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span style="margin: 0px; padding: 0px;"><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">string resource</span></span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"> <br style="margin: 0px; padding: 0px;" />          </span><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#vcode" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">versionCode</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span style="margin: 0px; padding: 0px;"><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">integer</span></span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />          </span><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#vname" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">versionName</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span style="margin: 0px; padding: 0px;"><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">string</span></span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />          </span><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5;">android:</span><a target=_blank href="http://developer.android.com/guide/topics/manifest/manifest-element.html#install" style="text-decoration: none; color: rgb(7, 93, 179); margin: 0px; padding: 0px;"><span class="atn" style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);">installLocation</span></a><span class="pun" style="margin: 0px; padding: 0px; line-height: 1.5;">=</span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">["auto"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"> | </span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"internalOnly"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"> | </span><span class="atv" style="margin: 0px; padding: 0px; line-height: 1.5;">"preferExternal"</span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;">] </span><span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5;">></span></span><span class="pln" style="margin: 0px; padding: 0px; line-height: 1.5;"><br style="margin: 0px; padding: 0px;" />    . . .<br style="margin: 0px; padding: 0px;" /></span><span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5;"></manifest></span></span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">android:installLocation<span style="margin: 0px; padding: 0px; line-height: 1.5; font-family: 宋体;">可以设置为</span>"auto"、"internalOnly"、"preferExternal"三个值中的任何一个.</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;"><span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5;">  auto:<span style="margin: 0px; padding: 0px; line-height: 1.5; font-family: 宋体;">程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户      可以决定把程序放在外部</span></span><span style="margin: 0px; padding: 0px; line-height: 1.5; font-family: 宋体;">储介质还是内存中.</span></span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  internalOnly:<span style="margin: 0px; padding: 0px; line-height: 1.5; font-family: 宋体;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);">默认值</span>.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.</span></span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  preferExternal:<span style="margin: 0px; padding: 0px; line-height: 1.5; font-family: 宋体;">将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了for      ward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.</span></span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);">注意:</span>当程序使用了Google Play的Copy Protection特性时,只能安装到内存中.</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">当程序被安装到外部存储介质时,</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">① .apk文件将被移动到外部存储介质上,但是程序的数据仍然会在内存中</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">② 保存.apk文件的容器将会使用一个随机生成的密钥进行加密,这样只有安装该程序的设置可以使用存在外部存储介质上的数据.</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;"><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);">警告</span><span style="margin: 0px; padding: 0px; line-height: 1.5; color: rgb(255, 0, 0);">:</span>当外部存储介质被卸载时,安装在该外部存储介质上的程序将立刻被终止掉!</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px; color: rgb(255, 0, 0);">向后兼容性:</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  声明了android:installLocation,但android:minSdkVersion小于8时,我们使用不低于Froyo的AVD进行编译,这样在低于Froyo的系统中android:installLocation将被忽略,而不低于Fro  yo的系统中将使用我们指定的android:installLocation.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px; color: rgb(255, 0, 0);">当我们的程序具有如下行为时我们不应该将程序安装到外部存储介质上</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ①Service</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    正在运行的服务将被终止,当外部存储介质被重新加载时服务不会被重启.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ②Alarm Service</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    闹钟服务将被取消,开发者必须在外部存储介质重新加载后重新注册闹钟服务.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ③Input Method Engines</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    输入法将被换成系统输入法,当外部存储介质被重新加载后用户可以通过系统设置来启动我们的输入法</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ④Live Wallpapers</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    我们的动态壁纸将被替换为默认的动态壁纸.外部存储介质重载后,用户可以更换回来.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑤Live Folders</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    我们的动态文件夹将被移出.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑥App Widgets</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    我们的小部件将被移出,通常只有系统重启后我们的小部件才可用.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑦Account Managers</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    使用AccountManager创建的账户将会消失,直至存储介质被重新加载.</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑧Sync Adapters</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    只有外部存储介质被重新加载时,我们的同步功能才可用</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑨Device Administrators</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    我们的DeviceAdminReceiver将会失效</span>
<span class="tag" style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">  ⑩监听开机结束事件</span>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">    系统会在加载外部存储介质之前发送ACTION_BOOT_COMPLETED广播.因此安装在外部存储介质的程序将不能接受开机广播.</span><div class="save_code tracking-ad" data-mod="popu_249" style="position: absolute; height: 60px; right: 30px; top: 5px; font-size: 14px; color: rgb(255, 255, 255); cursor: pointer; z-index: 2;"><a target=_blank target="_blank" style="color: rgb(12, 137, 207);"><img src="http://static.blog.csdn.net/images/save_snippets_01.png" style="border: none;" alt="" /></a></div>
<span style="margin: 0px; padding: 0px; line-height: 1.5; font-size: 14px;">通常,只要我们没有使用上述的特性,我们就可以将我们的程序安装到外部存储介质上.例如,大的游戏程序.当我们的APK文件有几M大时我们应该认真的考虑是否要将程序移动到外部存储介质上以帮助用户节省内存.</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值