2012-06-08 31 views
2

我收到了一个已安装的软件包列表,我如何知道哪一个可以移动到SD卡?已安装的软件包可以移动到SDCard

List<PackageInfo> list = pm.getInstalledPackages(0); 
for (int i = 0; i < list.size(); i++) { 

} 

if (_pm != null) { 
     List<PackageInfo> list = _pm.getInstalledPackages(0); 
     for (int i = 0; i < list.size(); i++) { 
      PackageInfo current = list.get(i); 
      long pkgSize = new File(current.applicationInfo.sourceDir).length(); 
      String pkgName = current.packageName; 
      String appName = current.applicationInfo.loadLabel(_pm).toString(); 
      Drawable appIcon = current.applicationInfo.loadIcon(_pm); 

      //if (pInfo.installLocation != PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY)//? 

      PackageItem pi = new PackageItem(pkgName, pkgSize, appIcon, appName); 

      if (_locationMode == LOCATION_PHONE) { 
       if (!onSdCard(pkgName)) { 
        _adapter.add(pi); 
       } 
      } else { 
       if (onSdCard(pkgName)) { 
        _adapter.add(pi); 
       } 
      } 
     } 
    } 

我既从我目前发现.installLocation,也没有从PackageInfo .INSTALL_LOCATION_INTERNAL_ONLY找到。有什么问题?


我既从我目前发现.installLocation,也没有从PackageInfo .INSTALL_LOCATION_INTERNAL_ONLY找到。有什么问题?

+0

我认为问题是,你正在使用'0',而不是实际的,[常旗(http://developer.android.com/reference/android /content/pm/PackageManager.html#GET_ACTIVITIES)(即'PackageManager.GET_ACTIVITIES')。 –

+0

你是什么意思?问题是我在eclipse中找不到packaheInfo.installLocation。 – thecr0w

回答

3

source code知道所有,

List<PackageInfo> list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES); 

for (PackageInfo pInfo : list) {   
    if (pInfo.installLocation != PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) { 
     // then it can be moved to the SD card 
    } else { 
     // otherwise, it can only be installed on internal storage 
    } 
} 
+0

我既不能从我当前找到.installLocation,也不能从PackageInfo中找到.INSTALL_LOCATION_INTERNAL_ONLY。有什么问题? – thecr0w

+1

应该从manifest.xml解析位置。 @see:http://stackoverflow.com/questions/3065219/accessing-androidinstalllocation-manifest-attribute – thecr0w

相关问题