获取手机中应用程序

判断app类型的依据,就是利用ApplicationInfo中的FLAG_SYSTEM来尽心给判断

app.flags & ApplicationInfo.FLAG_SYSTEM

  • 如果当前应用的app.flags & ApplicationInfo.FLAG_SYSTEM != 0 则为系统应用
  • 如果当前应用的app.flags & ApplicationInfo.FLAG_SYSTEM <= 0 则为第三方应用
  • 特殊的,当系统应用经过升级后,也将成为第三方应用:app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0
  • 如果当前应用的app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE != 0 则为安装再SDCard上的应用

public class PMTest extends Activity {

    public static final int ALL_APP = 0;
    public static final int SYSTEM_APP = 1;
    public static final int THIRD_APP = 2;
    public static final int SDCARD_APP = 3;

    private ListView mListView;
    private PackageManager pm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pm_main);
        mListView = (ListView) findViewById(R.id.listView_pm);
    }

    private List<PMAppInfo> getAppInfo(int flag) {
        // 获取PackageManager对象
        pm = this.getPackageManager();
        // 获取应用信息
        List<ApplicationInfo> listAppcations = pm
                .getInstalledApplications(
                        PackageManager.GET_UNINSTALLED_PACKAGES);
        List<PMAppInfo> appInfos = new ArrayList<PMAppInfo>();
        // 判断应用类型
        switch (flag) {
            case ALL_APP:
                appInfos.clear();
                for (ApplicationInfo app : listAppcations) {
                    appInfos.add(makeAppInfo(app));
                }
                break;
            case SYSTEM_APP:
                appInfos.clear();
                for (ApplicationInfo app : listAppcations) {
                    if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                        appInfos.add(makeAppInfo(app));
                    }
                }
                break;
            case THIRD_APP:
                appInfos.clear();
                for (ApplicationInfo app : listAppcations) {
                    if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
                        appInfos.add(makeAppInfo(app));
                    } else if ((app.flags &
                            ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
                        appInfos.add(makeAppInfo(app));
                    }
                }
                break;
            case SDCARD_APP:
                appInfos.clear();
                for (ApplicationInfo app : listAppcations) {
                    if ((app.flags &
                            ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
                        appInfos.add(makeAppInfo(app));
                    }
                }
                break;
            default:
                return null;
        }
        return appInfos;
    }

    private PMAppInfo makeAppInfo(ApplicationInfo app) {
        PMAppInfo appInfo = new PMAppInfo();
        appInfo.setAppLabel((String) app.loadLabel(pm));
        appInfo.setAppIcon(app.loadIcon(pm));
        appInfo.setPkgName(app.packageName);
        return appInfo;
    }

    public void setListData(int flag) {
        PMAdapter adapter = new PMAdapter(this, getAppInfo(flag));
        mListView.setAdapter(adapter);
    }

    public void btnAllApp(View view) {
        setListData(ALL_APP);
    }

    public void btnSystemApp(View view) {
        setListData(SYSTEM_APP);
    }

    public void btn3rdApp(View view) {
        setListData(THIRD_APP);
    }

    public void btnSdcardApp(View view) {
        setListData(SDCARD_APP);
    }
}

参考:Android群英传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值