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...アイテムをクリックすると、常に「いいえ」と表示されます) 。私のコードに何か問題があります。

4

1 に答える 1

2

これはこれ をデバッグするための良い方法ではありません。ログを使用する必要があります。返されるIDは、アプリケーションのIDになります。ロジックはこの仮定に従う必要があります。意図したすべてのものを基本的に取得していることを確認してください。APIに問題はありません。それは、ユーザーエラーです。

また、何が返されるのかがわからない場合は、APIを使用しても意味がありません。ドキュメントを読んでください

また、何が間違っている可能性があるかについてのヒントとして、私の提案は、リストに必要なものを確実に入力することです。アプリケーションとパッケージの違いを学びましょう。

getInstalledApplications(int flags)getInstalledPackages(int flags)

ドキュメントを読んで、使用されるフラグと有効な値を確認してください。getInstalledPackagesのagrumentsに0を渡すという仮定は、ドキュメント内の何にもマップされません。もちろん問題です。

そして、あなたの価値観が正しいと仮定する代わりに、私の最後のアドバイスは、何が比較されているかを確認してください。コードをテストするときは、妄想してください。

于 2012-05-22T23:47:50.707 に答える