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”) 。我的代码有问题。
答案 0 :(得分:2)
这是 NOT 调试此方法的好方法,您应该使用日志。将返回的ID将是应用程序的ID。你的逻辑应该遵循这个假设。确保您从根本上检索您想要的所有内容。我在API上没有任何问题,更是用户错误。
如果您不理解应该返回的内容,那么使用API也是无用的。 阅读文档。
此外,为了暗示可能出现的问题,我的建议是确保您按照自己的意愿填写清单。了解应用程序和程序包之间的差异。
getInstalledApplications(int flags) getInstalledPackages(int flags)
阅读文档以了解用于哪些标志以及哪些是有效值。您将0传递到getInstalledPackages的agruments中的假设不会映射到文档中的任何内容。这当然是一个问题。
我的最后一条建议,而不是假设你的价值是正确的,检查正在比较的是什么。在测试代码时要偏执。