2012-05-22 96 views
1
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView internetapps= (ListView) findViewById(R.id.list); 
    ArrayList myList = new ArrayList(); 
    PackageManager pm = this.getPackageManager(); 

    List<PackageInfo> applist= pm.getInstalledPackages(0); 

    Iterator<PackageInfo> it= applist.iterator(); 

    while (it.hasNext()){ 
     PackageInfo pk= (PackageInfo)it.next(); 

     if(PackageManager.PERMISSION_GRANTED==(pm.checkPermission(Manifest.permission.INTERNET, pk.packageName))) //checking if the package is having INTERNET permission 
     { 
     myList.add(""+pk.applicationInfo.loadLabel(pm)); 
     } 

    } 

    internetapps.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, myList)); 
    final TextView text1 = (TextView) findViewById(R.id.text2); 

    internetapps.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View arg1, int list_position,long app_Uid) 
     { 

      String app_selected=parent.getItemAtPosition(list_position).toString(); 

      final PackageManager pm = getPackageManager(); 
      //get a list of installed apps. 
      List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
      long UID; 
      //loop through the list of installed packages and see if the selected 
      //app is in the list 
      for (ApplicationInfo packageInfo : packages) { 
       if(packageInfo.packageName.equals(app_selected)){ 
        //get the UID for the selected app 
        UID = packageInfo.uid; 
        text1.setText("Yeah"); 

       } 
       else { 
        text1.setText("No"); 
       } 

      } 

     } 
    }); 

} 

如何從列表中的應用程序獲取應用程序的uid。我試圖通過使用上面的代碼來獲得uid,但它總是顯示負面結果(我使用setText來跟蹤它在if..else中運行的代碼...在我點擊一個項目後它總是顯示「No」) 。我的代碼有任何問題。從應用程序列表中獲取應用程序的使用方法

回答

2

這是不是很好的調試方法,你應該使用日誌。將返回的ID將是應用程序的ID。你的邏輯應該遵循這個假設。確保你從根本上檢索你想要的一切。在那裏我沒有錯誤的API,它更多的是用戶錯誤。

如果你不明白應該返回什麼,那麼使用API​​也是沒用的。 閱讀的文檔

此外,爲了提示什麼可能是錯誤的,我的建議將是確保你填寫你想要的清單。瞭解應用程序和軟件包之間的差異。

getInstalledApplications(INT標誌) getInstalledPackages(INT標誌)

閱讀文檔,瞭解使用何種標誌的,什麼是有效的值。您將0傳遞給getInstalledPackages的假設並不會映射到文檔中的任何內容。這當然是一個問題。

而我的最後一條建議,而不是假設你的值是正確的,檢查什麼是比較。測試代碼時偏執。

相關問題