[HILFE] Installierte Apps auflisten

D

Denny

Neues Mitglied
0
[FONT=&quot]Hi,

Ich würde gerne alle installierten Apps in einer ListView anzeigen lassen, sollte vom Aufbau aTrackDog ähneln...[/FONT]


atrackdog.jpg


[FONT=&quot]Leider bekomm ich das irgendwie nicht hin :-(

Könnte jemand vielleicht ein Beispiel posten???

Danke[/FONT]
 
wo ist dein problem?

im aufbau einer liste oder beim abfragen nach den installierten apps?
 
oder beides^^
 
swordi schrieb:
wo ist dein problem?

im aufbau einer liste oder beim abfragen nach den installierten apps?

Aufbau der liste...
 
RelativeLayout...
ImageView mit fester Größe (denn apps können auch icons mit 100*100 haben -.-), dann 2 TextViews rechts davon, und eins unter dem anderem. (rightOf und below)

Zuletzt ein weiteres ImageView mit alignParentRight=true.

Die Layoutfrage wäre damit schonmal geklärt.
Google mal List14.java.
Da siehste wie man Listviews mit hoher Performance erstellt.
Du musst dann nur noch den ViewHolder die nötigen Attribute geben (2 ImageViews, 2 TextViews) und in die getView Methode anpassen. ;)
 
Bisher habe ich:

Code:
package com.xxx_listapps;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class MainActivity extends ListActivity {

    int NumOfArry = 0;
    static int iAlleParkete;

    private static class EfficientAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private Bitmap mIcon1;
        private Bitmap mIcon2;

        public EfficientAdapter(Context context) {
            // Cache the LayoutInflate to avoid asking for a new one each time.
            mInflater = LayoutInflater.from(context);

            // Icons bound to the rows.
            mIcon1 = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.icon48x48_1);
            mIcon2 = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.icon48x48_1);
        }

        public int getCount() {
            return AppNameString.length;
        }


        public Object getItem(int position) {
            return position;
        }


        public long getItemId(int position) {
            return position;
        }


        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.list_item_icon_text,
                        null);

                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.text);
                holder.icon = (ImageView) convertView.findViewById(R.id.icon);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.text.setText(AppNameString[position]);
            holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

            return convertView;
        }

        static class ViewHolder {
            TextView text;
            ImageView icon;
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new EfficientAdapter(this));

        listPackages();
    }
    public static  String[] AllAppNames = new String[999];
    

    private void listPackages() {
        ArrayList<PInfo> apps = getInstalledApps(false);
        
        final int max = apps.size();
        for (int i = 0; i < max; i++) {
            apps.get(i).prettyPrint();
        }
    }

    private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
        ArrayList<PInfo> res = new ArrayList<PInfo>();
        List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

        for (int i = 0; i < packs.size(); i++) {
            PackageInfo p = packs.get(i);
            if ((!getSysPackages) && (p.versionName == null)) {
                continue;
            }

            String AppName = p.applicationInfo.loadLabel(getPackageManager())
                    .toString();

            AllAppNames[NumOfArry] = new String(AppName);
            NumOfArry = NumOfArry + 1;

        }
        return res;
    }
}
Es gibt leider 2 Probleme, woher weis ich wie lang mein Arry sein muss, und wie kann ich die Icons auslesen...??

Danke
 
static int iAlleParkete; :D
 
Fr4gg0r schrieb:
static int iAlleParkete; :D

Hast du auch ne Antwort die mir weiterhilft???

:p

PS: Laut Eclipse muss es static sein, da auch das Array static ist...
 
Zuletzt bearbeitet:
ja arraylist statt array benutzen^^

Icons von apps bekommst über den PackageManager mit getApplicationIcon(packageName) oder einer von den ähnlichen methoden.
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
17
Aufrufe
405
datNeMo
D
R
  • RudolfHagen
Antworten
1
Aufrufe
651
koje71
koje71
R
Antworten
9
Aufrufe
731
koje71
koje71
Zurück
Oben Unten