2012-06-08 30 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

相關問題