どのようにプルするインストールされているアプリケーション名、パッケージ名とアイコンdrawableのリスト

私はどのように私は私の既存のソースコードにこのコードを実装することができるかを把握しようとしています。現在、私はインストールされているすべてのアプリケーションのリストビューを表示するソースをいくつか持っていて、オンクリックはアプリケーションにインテントを送信します。アイコンを引っ張ってリストビューに追加する方法についていくつかサポートが必要です。

ヘルプ、ソースコードの編集、リンクなどは、私がこれを解決するのに役立ちます。

ありがとうございました

ListInstalledActivitiesActivity

public class ListInstalledActivitiesActivity extends ListActivity {

   //Buffer used to store package and class information, and also determine the number of installed activities
    private ArrayList _activitiesBuffer = null;

   //Buffers for package and class information
    private String[] _packages = null;
    private String[] _classes = null;

   //Index used to fill buffers
    private int _index = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main3);
       //Get all installed activities (package and class information for every activity)
        getAllInstalledActivities();              

       //Set content to GUI
        setListAdapter(new ArrayAdapter(this, R.layout.list_item, _classes));

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);

       //Add listener
        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

               //When clicked, show a toast with the selected activity
                Toast.makeText(
                    getApplicationContext(), 
                    ((TextView) view).getText(), 
                    Toast.LENGTH_SHORT).show();

               //When clicked, start selected activity, if allowed or possible
                try {

                    Intent intent = new Intent().setClassName(
                            _packages[position],//package 
                            _classes[position]);//class
                    startActivity(intent);

                } catch (Exception e) {
                    Toast.makeText(getApplicationContext(), "Unable to start selected application.", Toast.LENGTH_SHORT);
                }

          }//public void onItemClick(AdapterView<?> parent, View view, int position, long id)

        });

    }//public void onCreate(Bundle savedInstanceState)

    /*
     * Get all installed activities
     */
    private void getAllInstalledActivities() {


       //Initialize activities buffer
        _activitiesBuffer = new ArrayList();

        final Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        final List pkgAppsList = getPackageManager().queryIntentActivities( intent, 0);

        Iterator iterator1 = pkgAppsList.iterator();
        while (iterator1.hasNext()) {

            ResolveInfo resolveInfo = iterator1.next();

            String[] buf = new String[] {
                    resolveInfo.activityInfo.packageName, 
                    resolveInfo.activityInfo.name};

            _activitiesBuffer.add(buf);

        }//while (iterator1.hasNext())

        _packages = new String[_activitiesBuffer.size()];
        _classes = new String[_activitiesBuffer.size()];

        Iterator iterator2 = _activitiesBuffer.iterator();
        while (iterator2.hasNext()) {

            String[] buf = iterator2.next();

           //Store package information
            _packages[_index] = buf[0]; 

           //Store class information
            _classes[_index] = buf[1];

            _index++;

        }//while (iterator2.hasNext())

    }//private void getAllInstalledActivities()

      }

main3.xml

 

     

      <!-- 
3
nl ru de
2番目のオプションを実装するためにBaseAdapterを拡張してカスタムアダプタを作成する必要があります。これを参照してくださいをご覧ください。
追加された 著者 ρяσѕρєя K,

2 答え

インストールされたアプリケーションの名前とアイコンを取得するには、Package Managerクラスを使用する必要があります。ここではコードのスニペットがあり、アプリケーションの名前とアイコンを取得できます

   import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FetchApplicationsActivity extends Activity {

    TextView data;
    ImageView image1;
    LinearLayout holdlayout;
    View l1;
    private ArrayList results;
    List list;
    TextView result;
    String str = "";
    Drawable icon;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        l1 = findViewById(R.id.Layout1);
        results = new ArrayList();
        PackageManager pm = this.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        list = pm.queryIntentActivities(intent,
                PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo : list) {
            str = rInfo.activityInfo.applicationInfo.loadLabel(pm).toString()
                    + "\n";
            results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)
                    .toString());
            Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                    .loadLabel(pm).toString());
            icon = rInfo.activityInfo.applicationInfo.loadIcon(pm);
            holdlayout = new LinearLayout(getApplicationContext());
            holdlayout.setOrientation(LinearLayout.HORIZONTAL);
            data = new TextView(getApplicationContext());
            data.setText(str);
            image1 = new ImageView(getApplicationContext());
            image1.setBackgroundDrawable(icon);
            ((ViewGroup) holdlayout).addView(image1);
            ((ViewGroup) holdlayout).addView(data);
            ((ViewGroup) l1).addView(holdlayout);

        }
    }
}

Edit- You can define your main.xml as,

?xml version="1.0" encoding="utf-8"?>




    


        



    
    


ここでは、名前とアイコンを表示するために動的な textviewsImageviewslayout を作成しました。自分のカスタマイズしたリストを作成してこれを表示することができます。

Edit2- Here is a good link on how to create customized list and also look here. I think these will solve the issue.

3
追加された
ソースコードをありがとう、本当に感謝しています。今ではアンドロイド開発の初期段階で、私はどのように私の既存のコードをこれで更新するようになるでしょう。私はあなたがLayout1のIDを持つビューをコードしていることがわかります。私はmain1.xml idをLayout1に変更する必要があります。非常に簡単な質問をして申し訳ありません、サポートを感謝します
追加された 著者 Jaison Brooks,
私のコードを編集してそれを動作させようとしていますが、私の現在のコードを残すことをお勧めしますか?または、私があなたが提供したコードからやり直すべきですか?
追加された 著者 Jaison Brooks,
現在のコードを編集することはできますか?そうであれば、コードを現在の設定に差し込むことができます。再度、感謝します
追加された 著者 Jaison Brooks,
私はプログラミングのアンドロイドとjavaの新しい私は実際にいくつかの時点でこのコードの作業を行うことができるようにしたいと思うようにしたいと思いますように私はコンテンツビューを設定した後、私はちょうどあなたのコードを入力しないでください。再度、感謝します
追加された 著者 Jaison Brooks,
できます!!!!ありがとう、それはアイコンとアプリケーションの名前をロードするので、今私がしたいと思うのは、前に持っていたのと同じ機能を追加して、アイテム(アプリケーション)のonClickがそのアプリケーションに意図するようにすることです。私の前のコードにあるように。私を助けてくれてありがとう
追加された 著者 Jaison Brooks,
私はlistviewsの基本的な考え方を理解していません。私の既存のソースコードは、あなたが提供したコードを基本的に引き出して、リストビュー項目をクリックするとパッケージ名などを引っ張ってそれを意図するものです。
追加された 著者 Jaison Brooks,
問題はありません、あなたは私に電子メールを送ってもらえますか?このカスタマイズされたリストを作成しようとすることができます。あなたは私に電子メール@ [email protected]を撃つためにそれを見落とすことができます。
追加された 著者 Jaison Brooks,
リンクをチェックして、私ができることを見て、このページのソースコードを更新し、私がそれを更新したときにあなたにコメントしてください。もう一度おねがいします。本当にありがとう
追加された 著者 Jaison Brooks,
main3.xmlで書くことができることを示すために私の答えを編集しました。
追加された 著者 Sahil Mahajan Mj,
新しいプロジェクトを作成し、自分のコードが機能しているかどうかを確認してから、それを取得することができます。
追加された 著者 Sahil Mahajan Mj,
ここではカスタマイズされたリストが必要です。これは単純なリストとは異なります。リストの onClick()イベントで、質問に使用したインテントを渡します。うまくいけばうまくいくでしょう。
追加された 著者 Sahil Mahajan Mj,
私は自分の答えを編集しました。それらのリンクを見ることができます。あなたの問題が解決されたときにお知らせください。
追加された 著者 Sahil Mahajan Mj,

私はこのチュートリアルに従っており、非常に役立ちます:

名前、パッケージ名、バージョンとアイコン

class PInfo {
    private String appname = "";
    private String pname = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;
    private void prettyPrint() {
        Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
    }
}

private ArrayList getPackages() {
    ArrayList apps = getInstalledApps(false); /* false = no system packages */
    final int max = apps.size();
    for (int i=0; i getInstalledApps(boolean getSysPackages) {
    ArrayList res = new ArrayList();        
    List packs = getPackageManager().getInstalledPackages(0);
    for(int i=0;i
1
追加された