/** 
     * 查询手机内非系统应用 
     * @param context 
     * @return 
     */  
    public static List<PackageInfo> getInstalledApps(Context context) {  
        List<PackageInfo> apps = new ArrayList<PackageInfo>();  
        PackageManager pManager = context.getPackageManager();  
        //获取手机内所有应用  
        List<PackageInfo> paklist = pManager.getInstalledPackages(0);  
        String appName="";
        for (int i = 0; i < paklist.size(); i++) {  
            PackageInfo pak = (PackageInfo) paklist.get(i); 
            //判断是否为非系统预装的应用程序  
            if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM)<=0) {  
                // 获取应用名并在LogCat中打印出来
             appName = pManager.getApplicationLabel(pak.applicationInfo).toString();
             Log.i("GetInstalledApkInfo", appName);
                apps.add(pak);  
            }  
        }  
        return apps;  
    }  
请问大神(pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM)<=0)这一句是什么意思??具体是如何判断非系统应用程序的?为什么使用按位与&呢????大神,求解求解。Android

解决方案 »

  1.   

    设备初始化安装apk时是通过 PackageManagerService 服务完成的    这个里面它对于system/app路径下apk会设置一个flags  为FLAG_SYSTEM的标示  表明其为系统应用              data/app下的为可卸载的路径无FLAG_SYSTEM标示     对于一些定制路径下的apk也是在这个服务中设定的
    具体的可以去学习看下该类    我也是接触的不深~