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”) . 我的代码有什么问题。

4

1 回答 1

2

不是 调试的好方法,您应该使用日志。将返回的 ID 将是应用程序的 ID。你的逻辑应该遵循这个假设。确保您从根本上检索您想要的所有内容。API没有错,更多的是用户错误。

如果您不了解应该返回的内容,那么使用 API 也是无用的。阅读文档

此外,为了提示可能出现的问题,我的建议是确保您在列表中填写您想要的内容。了解应用程序和包之间的区别。

getInstalledApplications(int flags) getInstalledPackages(int flags)

阅读文档以了解标志的用途以及有效值。您将 0 传递到 getInstalledPackages 的参数的假设并未映射到文档中的任何内容。这当然是个问题。

我的最后一条建议不是假设您的价值观是正确的,而是检查正在比较的内容。测试代码时要多疑。

于 2012-05-22T23:47:50.707 回答