获取手机内的所有应用列表

本文介绍如何在Android平台上通过编程方式获取设备上安装的所有应用程序列表,包括展示相关XML布局设计和Adapter实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:


activity:

public class AppInfoActivity extends AppCompatActivity {

    ListView listView;
    List<AppInfo> mList = new ArrayList<>();
    AppInfoAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_info);

        getData();
        listView = (ListView) findViewById(R.id.activity_app_info_list);
        mAdapter = new AppInfoAdapter(this,mList);
        listView.setAdapter(mAdapter);
    }

    private void getData() {
        List<PackageInfo> packageInfos = getPackageManager().getInstalledPackages(0);
        for (int i = 0; i < packageInfos.size(); i++) {
            PackageInfo packageInfo = packageInfos.get(i);
            //屏蔽掉系统应用
            if ((ApplicationInfo.FLAG_SYSTEM & packageInfo.applicationInfo.flags) != 0)
            {
                continue;
            }

            AppInfo appInfo = new AppInfo();
            appInfo.setAppName(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
            appInfo.setPackageName(packageInfo.packageName);
            appInfo.setVersionCode(packageInfo.versionCode);
            appInfo.setVersionName(packageInfo.versionName);
            appInfo.setIcon(packageInfo.applicationInfo.loadIcon(getPackageManager()));

            mList.add(appInfo);
        }
    }
}


xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/activity_app_info_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

Adapter:

public class AppInfoAdapter extends BaseAdapter {

    private List<AppInfo> mList;
    private Context mContext;
    private LayoutInflater mLayoutInflater;

    public AppInfoAdapter(Context context,List<AppInfo> list)
    {
        this.mContext = context;
        this.mList = list;
        this.mLayoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

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

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

        AppInfo appInfo = mList.get(position);

        View view = null;
        AppInfoHolder appInfoHolder;
        if (convertView == null)
        {
            view = mLayoutInflater.inflate(R.layout.item_app_info,parent,false);
            appInfoHolder = new AppInfoHolder();
            appInfoHolder.imageView = (ImageView) view.findViewById(R.id.item_image);
            appInfoHolder.textView = (TextView) view.findViewById(R.id.item_name);

            view.setTag(appInfoHolder);
            convertView = view;
        }else {
            appInfoHolder = (AppInfoHolder) convertView.getTag();
        }

        appInfoHolder.imageView.setImageDrawable(appInfo.getIcon());
        appInfoHolder.textView.setText(appInfo.getAppName());

        return convertView;
    }

    private class AppInfoHolder{
        ImageView imageView;
        TextView textView;
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center_vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/item_name"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

</LinearLayout>

实体类:

public class AppInfo {
    private String appName = "";
    private String packageName = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

    public String getVersionName() {
        return versionName;
    }

    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }

    public int getVersionCode() {
        return versionCode;
    }

    public void setVersionCode(int versionCode) {
        this.versionCode = versionCode;
    }

    public Drawable getIcon() {
        return icon;
    }

    public void setIcon(Drawable icon) {
        this.icon = icon;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值