2012-05-22 88 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的假设并不会映射到文档中的任何内容。这当然是一个问题。

而我的最后一条建议,而不是假设你的值是正确的,检查什么是比较。测试代码时偏执。

相关问题