精华内容
下载资源
问答
  • 假如我们加入了一家新公司,需要为开发团队安装所需要的软件并且重启服务 首先要弄清楚它们运行在什么发行版本上以及在哪个版本的系统上,才能正确的完成后续的工作 作为一名系统管理员,充分了解系统信息是首要的...
    假如我们加入了一家新公司,需要为开发团队安装所需要的软件并且重启服务
    首先要弄清楚它们运行在什么发行版本上以及在哪个版本的系统上,才能正确的完成后续的工作
    作为一名系统管理员,充分了解系统信息是首要的任务
    
    对于rhel、debian、opensuse、archlinux这几种主流发行版本来说,它们各自拥有不同的包管理器来管理系统上的软件包
    如果不知道使用的是哪一个发行版本的系统,在软件包安装的时候就会无从下手
    大多数的发行版本都是用systemd命令
    

    RHEL一般指Red Hat Enterprise Linux,Red Hat公司发布的面向企业用户的Linux操作系统

    广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Debian项目众多内核分支中以Linux宏内核为主
    而且 Debian开发者 所创建的操作系统中绝大部分基础工具来自于GNU工程 ,因此 “Debian” 常指Debian GNU/Linux

    openSUSE 项目是由 Novell 发起的开源社区计划。
    旨在推进 Linux 的广泛使用,提供了自由简单的方法来获得世界上最好用的 Linux 发行版之一:openSUSE。
    openSUSE 项目为 Linux开发者和爱好者提供了开始使用 Linux 所需要的一切。
    openSUSE是一个一般用途的基于Linux内核的GNU/Linux操作系统

    Arch Linux是一款基于 x86-64 架构的 Linux 发行版。系统主要由自由和开源软件组成,支持社区参与。
    接下来看看可以使用哪些基本命令来查看linux发行版名称和版本号

    方法一:lsb_release -a命令
    LSB(linux标准库linux standard base)

    方法二:cat /etc/os-release
    在这里插入图片描述

    rhel系统 cat /etc/os-release cat /etc/system-release cat /etc/redhat-release
    centos系统 cat /etc/centos-release
    fedora系统 cat /etc/fedora-release
    在这里插入图片描述
    方法三:uname 命令
    uname(unix name)是一个打印系统信息的工具,包括:内核名称、版本号、系统详细信息以及所运行的操作系统等
    在这里插入图片描述
    在这里插入图片描述

    方法四:cat /proc/version
    该文件记录了linux内核发行的版本、用于编译内核的gcc版本、内核编译的时间、以及内核编译者的用户名
    在这里插入图片描述
    方法五:dmesg命令
    dmesg(展现信息display message 或者 驱动程序信息driver message)是大多数unix操作系统上面的一个命令,用于打印内核的消息缓冲区的信息
    在这里插入图片描述

    方法六:yum命令
    Yum是linux操作系统上的一个包管理工具,yum命令是被用于一些基本RedHat的linux发行版上的安装、更新、查找、删除软件包
    方法七:rpm命令
    RPM(红帽包管理器RedHat Package Manager)是在CentOS、Oracle、Linux、Fedora这些基于RedHat的操作系统上面的一个强大的命令行包管理工具,同样也可以帮助我们查看系统的版本信息
    在这里插入图片描述

    CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS完全开源。

    Oracle一般指甲骨文公司
    本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
    甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    Fedora 是一个 Linux 发行版,是一款由全球社区爱好者构建的面向日常应用的快速、稳定、强大的操作系统。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准。Fedora 项目由 Fedora 基金会管理和控制,得到了 Red Hat 的支持。

    展开全文
  • 怎样查看ie浏览器的版本

    千次阅读 2013-11-10 16:35:49
    相信IE浏览器是很多网友平时最常用的软件之一,其中还有部分网友对IE浏览器的各个版本信息了解的甚少。以至于很多用户还在是使用相对落后的IE6这个版本。 怎么查看并确认自己当前使用的IE浏览器版本成为影响这部分...

    相信IE浏览器是很多网友平时最常用的软件之一,其中还有部分网友对IE浏览器的各个版本信息了解的甚少。以至于很多用户还在是使用相对落后的IE6这个版本。

    怎么查看并确认自己当前使用的IE浏览器版本成为影响这部分用户升级浏览器的一个因素。若要确定当前IE浏览器的版本信息,您可以使用下列方法之一:

    一、使用用户界面确定IE浏览器的版本。

    在所有的IE浏览器版本中,单击“帮助”菜单上的“关于 Internet Explorer”。产品和版本信息都显示在所出现的对话框中。用这个方式判断IE浏览器版本是最常规,也是最简单的方法。

    二、使用注册表确定IE浏览器的版本:

    您可以通过查看以下的注册表项确定您运行的 Internet Explorer 的版本,在注册表中找到下面的位置

    HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer

    如果“Version”值显示在此项中,则安装了 Internet Explorer 4.0 或更高版本。版本字符串值包含计算机上安装的 Internet Explorer 4.0(或更高版本)的版本。(例如,Internet Explorer 5 的版本字符串值是“5.0.2014.0216”)。请注意,如果次要版本号为 00,则注册表中只存储一个零来表示次要版本号。如果次要版本号不是 00,则存储完整的版本值。(例如,5.50.4807.2300 在注册表中存储为 5.50.4807.2300)。

    Internet Explorer 3.x 不向注册表添加版本值。相反,它向同一注册表项添加“build”值,并将“IVer”字符串值更新为“103”。为了向后兼容,Internet Explorer 4.0 和更高版本修改或添加了“build”值。对于 Internet Explorer 3.x,“build”值是一个包含四字符内部版本号的字符串。(例如,Internet Explorer 3.02 的“build”值为“1300”)。对于 Internet Explorer 4.0 和更高版本,“build”值是一个包含五字符值的字符串,后面跟一个句点和四个其他字符,格式如下:

    三、使用 Shdocvw.dll 文件确定IE浏览器的版本:

    从 Internet Explorer 3.0 到 6.0,浏览器都在 Shdocvw.dll(外壳文档对象和控制库)文件中实现。因此,对于 Internet Explorer 3.0 到 6.0,可以使用 Shdocvw.dll 文件的版本来确定计算机上所安装的 Internet Explorer 的版本。若要确定 Internet Explorer 7 的版本号,必须使用 Iexplore.exe 的版本。为此,请按照下列步骤操作:

    1. 单击“开始”,指向“查找”,然后单击“文件或文件夹”
    2. “名称”框中,键入 shdocvw.dll,然后单击“立即查找”
    3. 在文件列表中,右键单击“Shdocvw.dll”文件,然后单击“属性”
    4. 单击“版本”选项卡。
    5. 重复步骤 2 到 4,但在步骤 2 中键入 iexplore.exe。如果 Iexplore.exe 的版本为 7.x,则说明安装了 Internet Explorer 7。请使用本文前面的 Internet Explorer 版本表对 Internet Explorer 7 的版本号和发行版进行比较。

    下表列出了 Shdocvw.dll 文件的不同版本以及对应的 Internet Explorer 版本。

    版本 产品
    4.70.1155 Internet Explorer 3.0
    4.70.1158 Internet Explorer 3.0 (Windows 95 OSR2)
    4.70.1215 Internet Explorer 3.01
    4.70.1300 Internet Explorer 3.02 和 3.02a
    4.71.1008.3 Internet Explorer 4.0 Platform Preview 2.0 (PP2)
    4.71.1712.5 Internet Explorer 4.0
    4.72.2106.7 Internet Explorer 4.01
    4.72.3110.3 Internet Explorer 4.01 Service Pack 1 (Windows 98)
    4.72.3612.1707 Internet Explorer 4.01 Service Pack 2
    5.00.0518.5 Internet Explorer 5 Developer Preview (Beta 1)
    5.00.0910.1308 Internet Explorer 5 Beta (Beta 2)
    5.00.2014.213 Internet Explorer 5
    5.00.2314.1000 Internet Explorer 5 (Office 2000)
    5.00.2516.1900 Internet Explorer 5.01 (Windows 2000 Beta 3, build 5.00.2031)
    5.00.2614.3500 Internet Explorer 5 (Windows 98 Second Edition)
    5.00.2919.800 Internet Explorer 5.01 (Windows 2000 RC1, build 5.00.2072)
    5.00.2919.3800 Internet Explorer 5.01 (Windows 2000 RC2, build 5.00.2128)
    5.00.2919.6307 Internet Explorer 5.01 (Office 2000 SR-1)
    5.00.2920.0000 Internet Explorer 5.01 (Windows 2000, build 5.00.2195)
    5.00.3103.1000 Internet Explorer 5.01 SP1 (Windows 2000 SP1)
    5.00.3105.0106 Internet Explorer 5.01 SP1(Windows 95/98 和 Windows NT 4.0)
    5.00.3314.2100 Internet Explorer 5.01 SP2(Windows 95/98 和 Windows NT 4.0)
    5.00.3315.2879 Internet Explorer 5.01 SP2 (Windows 2000 SP2)
    5.00.3502.5400 Internet Explorer 5.01 SP3(仅限于 Windows 2000 SP3)
    5.00.3700.6668 Internet Explorer 5.01 SP4(仅限于 Windows 2000 SP4)
    5.50.3825.1300 Internet Explorer 5.5 Developer Preview (Beta)
    5.50.4030.2400 Internet Explorer 5.5 和 Internet 工具 Beta
    5.50.4134.0100 Internet Explorer 5.5 for Windows Me (4.90.3000)
    5.50.4134.0600 Internet Explorer 5.5
    5.50.4308.2900 Internet Explorer 5.5 Advanced Security Privacy Beta
    5.50.4522.1800 Internet Explorer 5.5 Service Pack 1
    5.50.4807.2300 Internet Explorer 5.5 Service Pack 2
    6.00.2462.0000 Internet Explorer 6 Public Preview (Beta)
    6.00.2479.0006 Internet Explorer 6 Public Preview (Beta) Refresh
    6.00.2600.0000 Internet Explorer 6 (Windows XP)
    6.00.2800.1106 Internet Explorer 6 Service Pack 1 (Windows XP SP1)
    6.00.2900.2180 用于 Windows XP SP2 的 Internet Explorer 6
    6.00.2900.5512 用于 Windows XP SP3 的 Internet Explorer 6
    6.00.2800.1278 Internet Explorer 6 Update v.01 Developer Preview (SP1b Beta)
    6.00.2800.1314 Internet Explorer 6 Update v.04 Developer Preview (SP1b Beta)
    6.00.3663.0000 用于 Microsoft Windows Server 2003 RC1 的 Internet Explorer 6
    6.00.3718.0000 用于 Windows Server 2003 RC2 的 Internet Explorer 6
    6.00.3790.0000 用于 Windows Server 2003 的 Internet Explorer 6(已发布)
    6.00.3790.1830 用于 Windows Server 2003 SP1 和 Windows XP x64 的 Internet Explorer 6

    注意

    • 次要版本号、内部版本号以及子内部版本号可能不显示尾部的零。例如,版本 7.00.5730.1100 可能显示为 7.0.5730.11。
    • 在 Windows 95、Windows 98 和 Windows Millennium Edition 中,Shdocvw.dll 文件安装在 %Windir%\System 文件夹中。在 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003 中,Shdocvw.dll 文件安装在 %Windir%\System32 文件夹中。如果 Shdocvw.dll 文件不存在,则说明 Internet Explorer 安装有误或根本没有安装。
    • 如果此表中没有列出您计算机上的 Shdocvw.dll 文件的版本,则您已经安装了包含较新版本的 Shdocvw.dll 文件的 Internet Explorer 修补程序或安全更新。例如,用于 Internet Explorer 6 SP1 的 Shdocvw.dll 6.0.2800.1170 版包括在“MS03-015:2003 年 4 月版 Internet Explorer 累积修补程序 (813489)”程序包中。如果此表中没有列出您的 Shdocvw.dll 的版本,则您运行的 Internet Explorer 版本就是版本号低于且最接近于您的版本号的那个版本。若要确定安装了哪个 Internet Explorer 修补程序或安全更新,请在 Microsoft 知识库中搜索您计算机上的 Shdocvw.dll 版本号和“Shdocvw.dll”。
    • Internet Explorer 6 Update v.01 和 v.04 是 Internet Explorer 6 的预发行版,当程序加载 ActiveX 控件时会更改 Internet Explorer 的行为。这些预发行更新是在并行模式下安装的,它们不会影响 Internet Explorer 6 SP1 的安装或版本号 (6.00.2800.1106)。Internet Explorer 6 Update v.01 和 v.04 要求安装 Windows XP Service Pack 1。有关这些预发行更新的更多信息,请访问下面的 Microsoft 网站:http://msdn.microsoft.com/zh-cn/ie/bb969055.aspx (http://msdn.microsoft.com/zh-cn/ie/bb969055.aspx)
    • 列表中的 Internet Explorer 版本号取决于 Windows 的版本。最新的修补程序可能会更改列表中的版本号。
    展开全文
  • 方法/步骤 1、通过配置文件查看,找到eclipse的安装路径 jdk版本查询 ... 3、找到文件后,使用文本编辑工具,或记事本打开,可以看到eclipse的一些配置...5、也可以打开eclipse软件进行查看。具体依次点击【Help】–>

    方法/步骤
    1、通过配置文件查看,找到eclipse的安装路径

    jdk版本

    2、点击打开【打开文件位置】,进入到eclipse的安装目录,找到eclipse.ini文件

    3、找到文件后,使用文本编辑工具,或记事本打开,可以看到eclipse的一些配置信息,如下图

    4、如图中的红框所示,如果是win32.x86 ,则是 32位的Eclipse ,如果是“win32.x86_64”,则是64位的Eclipse ,如下图:

    5、也可以打开eclipse软件进行查看。具体依次点击【Help】–>【About Eclipse】,可见如下图

    6、再点击【Installation Details】–>【Configuration】可以看到相应eclipse信息,同样可见如果是win32.x86 ,则是 32位的Eclipse ,如果是“win32.x86_64”,则是64位的Eclipse 。

    展开全文
  • Android 怎样获得手机信息

    千次阅读 2013-09-28 09:46:45
     这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。...

    Android 怎样获得手机信息

     

     获取当前的网络类型是WIFI还是GPRS

     public static String getCurrentNetType(Context context) {
      ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
      NetworkInfo gprs = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
      TelephonyManager telMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

      if (wifi != null && wifi.getState() == State.CONNECTED) {
       return "wifi";
      } else if (gprs != null && gprs.getState() == State.CONNECTED) {
       return "mobile_" + telMgr.getNetworkType();
      }
      return "";
     }

    android里 通过Intent来启动其他非系统应用程序

    android应用程序内部通过Intent来实现Activity间的跳转。也知道通过Intent调用系统程序。但若想在应用程序A内开启应用程序B(前提是A、B均已安装),该如何去实现?
    记录下实现过程。
    在应用程序A内添加如下代码:
    1. Intent i = new Intent();
    2. i.setClassName("com.example.a",
    3. "com.example.a.AActivity");
    4. startActivity(i);
    				Intent i = new Intent();
    				i.setClassName("com.example.a",
    						"com.example.a.AActivity");
    				startActivity(i);

    或者
    1. Intent i = new Intent();
    2. ComponentName cn = new ComponentName("com.example.b",
    3. "com.example.b.BActivity");
    4. i.setComponent(cn);
    5. startActivity(i);
    				Intent i = new Intent();
    				ComponentName cn = new ComponentName("com.example.b",
    				"com.example.b.BActivity");
    				i.setComponent(cn);
    				startActivity(i);

    注:
    com.example.a是应用程序B的包名
    com.example.a.AActivity是应用程序B你将要启动的Activtiy

    这样就可以OK了,附上demo见资源里面。

     

     

    android启动其他应用的一段代码

     

    1. private void startAppByPackageName(String packageName){
    2. PackageInfo pi = null;
    3. try {
    4. pi = getPackageManager().getPackageInfo(packageName, 0);
    5. } catch (NameNotFoundException e) {
    6. e.printStackTrace();
    7. }
    8. Intent resolveIntent = new Intent(Intent.ACTION_MAIN,null);
    9. resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    10. resolveIntent.setPackage(pi.packageName);
    11. List<ResolveInfo> apps = getPackageManager().queryIntentActivities(resolveIntent,0);
    12. ResolveInfo ri = apps.iterator().next();
    13. if (ri != null ) {
    14. String packageName1 = ri.activityInfo.packageName;
    15. String className = ri.activityInfo.name;
    16. Intent intent = new Intent(Intent.ACTION_MAIN);
    17. intent.addCategory(Intent.CATEGORY_LAUNCHER);
    18. ComponentName cn = new ComponentName(packageName1, className);

    intent.setComponent(cn);

    //增加下面FLAG可以实现

    //在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivity(intent);

    }

    }

     

     

     

      public void getRunningProcess(){
      //正在运行的
      ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
      //获取正在运行的应用
      List<RunningAppProcessInfo> run = am.getRunningAppProcesses();
      //获取包管理器,在这里主要通过包名获取程序的图标和程序名
      PackageManager pm =this.getPackageManager();
      for(RunningAppProcessInfo ra : run){
       //这里主要是过滤系统的应用和电话应用,当然你也可以把它注释掉。
       if(ra.processName.equals("system") || ra.processName.equals("com.android.phone")){
       continue;
       }
       String packetname=ra.processName;//com.google.android.googlequicksearchbox    
      }    
     }

     

     

    检测某ActivityUpdate是否在当前Task的栈顶

    复制代码
    public static boolean isTopActivy(String cmdName, Context context)
        {
            ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(Integer.MAX_VALUE);
            String cmpNameTemp = null;
            if (null != runningTaskInfos)
            {
                cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
            }
    
            if (null == cmpNameTemp)
            {
                return false;
            }
            
            return cmpNameTemp.equals(cmdName);
    
        }
    复制代码

    判断Android应用是否在前台

    复制代码
    public static boolean isAppOnForeground(Context context)
        {
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            String packageName = context.getPackageName();
            List<RecentTaskInfo> appTask = activityManager.getRecentTasks(Integer.MAX_VALUE, 1);
            
            if (appTask == null)
            {
                return false;
            }
            
            if (appTask.get(0).baseIntent.toString().contains(packageName))
            {
                return true;
            }
            return false;
        }
    复制代码

    获取Android手机内安装的所有桌面

    复制代码
    private static List<String> getAllTheLauncher(Context context)
        {
            List<String> names = null;
            PackageManager pkgMgt = context.getPackageManager();
            Intent it = new Intent(Intent.ACTION_MAIN);
            it.addCategory(Intent.CATEGORY_HOME);
            List<ResolveInfo> ra = pkgMgt.queryIntentActivities(it, 0);
            if (ra.size() != 0)
            {
                names = new ArrayList<String>();
            }
            for (int i = 0; i < ra.size(); i++)
            {
                String packageName = ra.get(i).activityInfo.packageName;
                names.add(packageName);
            }
            return names;
        }
    复制代码

    Android 判断程序前后台状态

    复制代码
    public static boolean isLauncherRunnig(Context context)
        {
            boolean result = false;
            List<String> names = getAllTheLauncher(context);
            ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> appList = mActivityManager.getRunningAppProcesses();
            for (RunningAppProcessInfo running : appList)
            {
                if (running.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
                {
                    for (int i = 0; i < names.size(); i++)
                    {
                        if (names.get(i).equals(running.processName))
                        {
                            result = true;
                            break;
                        }
                    }
                }
            }
            return result;
        }
    复制代码

     

     

     

     

     

     

     //获取APK的基本信息

     public  void getApkInfo(){
        List<PackageInfo> packs = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
       for (PackageInfo pi : packs) 
       {
        String apkName=pi.applicationInfo.loadLabel(getPackageManager()).toString();    
        String apkVerName=pi.versionName;
        int apkVerCode= pi.versionCode;
        Drawable icon = pi.applicationInfo.loadIcon(getPackageManager());
        String packageName = pi.packageName;
        String ff =pi.applicationInfo.publicSourceDir;//=/system/framework/framework-res.apk /data/app/cn.findmm-1.apk
        String apkSize = formetFileSize((new File(pi.applicationInfo.publicSourceDir)).length());

       }
     }

     

    //根据应用名获取应用版本号
     public String getInstallAppPackageVersion()
     {
      String s="UC浏览器";
      String s1;
      List list;
      int i;
      s1 = null;
      list = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
      
      for(i = 0;i<list.size();i++){
       PackageInfo packageinfo = (PackageInfo)list.get(i);
       String s2 = packageinfo.applicationInfo.loadLabel(getPackageManager()).toString();
       if (packageinfo.applicationInfo.publicSourceDir.contains("/data/app") && s.equals(s2))
       {
        s1 = packageinfo.versionName;
        break;
       }
      }
      return s1;

     }

     

     //由包名com.google.android.googlequicksearchbox 得到APK文件的路径名/system/app/Velvet.apk
     public String getApkFile(){
      String s="com.google.android.googlequicksearchbox";
      String s1;
      String as[];
      int i;
      s1 = null;
      as = (new File("/system/app/")).list();
     
      for(i=0;i < as.length;i++){
       if (getApkPackageName((new StringBuilder("/system/app/")).append(as[i]).toString()).contains(s)){    
        return s1 = (new StringBuilder("/system/app/")).append(as[i]).toString();//Velvet.apk
       }       
      }
      return s1;
     }
     
     
     public String getApkPackageName(String s)
     {
      PackageInfo packageinfo = getPackageManager().getPackageArchiveInfo(s, 1);
      String s1 = null;
      if (packageinfo != null)
      {
       s1 = packageinfo.applicationInfo.packageName;
      }
      return s1;
     }

     

     


     private boolean checkPackageExist() {
        List<PackageInfo> packs = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
       for (PackageInfo pi : packs) 
       {     
        String apkName=pi.applicationInfo.loadLabel(getPackageManager()).toString();
        
        String apkVerName=pi.versionName;
        int apkVerCode= pi.versionCode;
        Drawable icon = pi.applicationInfo.loadIcon(getPackageManager());
        String packageName = pi.packageName;
        String apkSize = formetFileSize((new File(pi.applicationInfo.publicSourceDir)).length());

        File file = new File(pi.applicationInfo.publicSourceDir);
        if (!file.exists()){
         continue;
        }


        //pi.versionCode         
        //pi.versionName         
        //pi.packageName         
        //pi.applicationInfo
        if(pi.packageName.equals("com.android.email") ){
         return true;
        }
     
       }
       return false;
     }
     
     public static String formetFileSize(long l)
     {
      DecimalFormat decimalformat = new DecimalFormat("#.00");
      String s;
      if (l < 1024L)
       s = (new StringBuilder(String.valueOf(decimalformat.format(l)))).append("B").toString();
      else
      if (l < 0x100000L)
       s = (new StringBuilder(String.valueOf(decimalformat.format((double)l / 1024D)))).append("K").toString();
      else
      if (l < 0x40000000L)
       s = (new StringBuilder(String.valueOf(decimalformat.format((double)l / 1048576D)))).append("M").toString();
      else
       s = (new StringBuilder(String.valueOf(decimalformat.format((double)l / 1073741824D)))).append("G").toString();
      return s;
     }
     
     

     

     

     

     public boolean istop_focusactivity(){
      
      ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
      ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity;
      String activityname=cn.getClassName();
      if(activityname.equals("com.example.test.MainActivity")){
       return true;
      }
      else{
       return false;
      }
      
     }

     

     public boolean in_top_activity(){
      
      // 获取的正在运行的activity的最大数量(防止太多,系统承受不了啊)、
      int maxNum = 40;
      // ActivityManager的功能是为系统中所有运行着的Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等
      ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
      List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(maxNum);
      for(ActivityManager.RunningTaskInfo taskInfo:runningTasks){
       if(taskInfo.baseActivity.getClassName().equals("com.cyanogenmod.trebuchet.Launcher")){
        return true;
       } 
      }
      return false;
      
      
     }

     

     

     

    1. /**
    2. * PackageManager介绍:
    3. * 本类API是对所有基于加载信息的数据结构的封装,包括以下功能:
    4. * 安装,卸载应用 查询permission相关信息 查询Application相关
    5. * 信息(application,activity,receiver,service,provider及相应属性等)
    6. * 查询已安装应用 增加,删除permission 清除用户数据、缓存,代码段等 非查询相关的API需要特定的权限。
    7. * 主要包含了,安装在当前设备上的应用包的相关信息
    8. * 如下:获取已经安装的应用程序的信息
    9. */
    10. private HashMap<String, String> installPackagesInfo(){
    11. // 获取packageManager对象
    12. PackageManager packageManager = this.getPackageManager();
    13. /*getInstalledApplications 返回当前设备上安装的应用包集合
    14. * ApplicationInfo对应着androidManifest.xml中的application标签。通过它可以获取该application对应的信息
    15. */
    16. List<ApplicationInfo> applicationInfos = packageManager.getInstalledApplications(0);
    17. HashMap<String, String> resultMap = new HashMap<String, String>();
    18. Iterator<ApplicationInfo> iterator = applicationInfos.iterator();
    19. while(iterator.hasNext()){
    20. ApplicationInfo applicationInfo = iterator.next();
    21. String packageName = applicationInfo.packageName;// 包名
    22. String packageLabel = packageManager.getApplicationLabel(applicationInfo).toString();//获取label
    23. resultMap.put(packageLabel, packageName);
    24. }
    25. return resultMap;
    26. }

     

     

     

    1. /**
    2. * 获取系统中正在运行的任务信息(强调下,任务是多个activity的集合)
    3. */
    4. public void run(){
    5. String info = "" ;
    6. // 获取的正在运行的activity的最大数量(防止太多,系统承受不了啊)、
    7. int maxNum = 40;
    8. // ActivityManager的功能是为系统中所有运行着的Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等
    9. ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
    10. /**
    11. * 获取正在运行的任务这里一定要注意,这里我们获取的时候,
    12. * 你的任务或者其中的activity可能没结束,但是当你在后边使用的时候,很有可能已经被kill了哦。
    13. * 意思很简单,系统返给你的正在运行的task,是暂态的,仅仅代表你调用该方法时系统中的状态,
    14. * 至于后边是否发生了该变,系统概不负责、
    15. */
    16. List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(maxNum);
    17. for(ActivityManager.RunningTaskInfo taskInfo:runningTasks){
    18. info+="一个任务信息开始:/n";
    19. info+="当前任务中正处于运行状态的activity数目:"+taskInfo.numRunning;
    20. info+="当前任务中的activity数目: "+taskInfo.numActivities;
    21. info+="启动当前任务的activity名称:"+taskInfo.baseActivity.getClassName();
    22. }

     

    如何得到当前正在运行的activity是哪个??

     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
    Log.d("packageName", "pkg:"+cn.getPackageName());
    Log.d("className", "cls:"+cn.getClassName());

    加权限
    <uses-permission android:name="android.permission.GET_TASKS"/>

     

    android打电话接口、获取本机号码

    打电话:

    Intent intent = newIntent(Intent.ACTION_CALL, Uri.parse("tel:"+"13333333333"));
    startActivity(intent);

     

    获取本机号码:

    TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
    String deviceid = tm.getDeviceId();
    String tel = tm.getLine1Number(); //本机号码
    String imei =tm.getSimSerialNumber();
    String imsi =tm.getSubscriberId();
    res.setText(deviceid+"#"+tel+"#"+imei+"#"+imsi);

    注意:
    并不是所有的sim卡都可以读取到手机号,这取决与运营商是否将手机号写入到sim卡中。
    基于这个原因,有人出一个曲线救国的方案:向10086发送一个短信,然后注册短信receiver从而获取到本机号码(这个没有试过)

     

     

    Android判断Service是否运行

    /**
    02 * 判断服务是否正在运行
    03 * @return
    04 */
    05 public boolean isServiceWorked() {
    06 ActivityManager myManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    07 ArrayList runningService = (ArrayList) myManager.getRunningServices(Integer.MAX_VALUE);
    08 for(inti =0; i < runningService.size(); i++) {
    09 if(runningService.get(i).service.getClassName().toString()
    10 .equals("com.sunnorth.eyeincar.EyeInCarService")) {
    11 returntrue;
    12 }
    13 }
    14 returnfalse;
    15 }

     

     

     

     

    1.手机信息查看助手可行性分析

      开始进入编写程序前,需要对需求的功能做一些可行性分析,以做到有的放矢,如果有些无法实现的功能,可以尽快调整。

      这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。实现API接口不是什么问题,主要把精力集中在如何实现运行系统命令,获取其返回的结果功能实现上。具体实现代码如下所示:

    Java代码:

    • public class CMDExecute {
    • public synchronized String run(String [] cmd, String workdirectory) throws IOException {
    • String result = "";
    • try {
    • ProcessBuilder builder = new ProcessBuilder(cmd);
    • InputStream in = null;
    • //设置一个路径
    • if (workdirectory != null) {
    • builder.directory(new File(workdirectory));
    • builder.redirectErrorStream(true);
    • Process process = builder.start();
    • in = process.getInputStream();
    • byte[] re = new byte[1024];
    • while (in.read(re) != -1)
    • result = result + new String(re);
    • }
    • if (in != null) {
    • in.close();
    • }
    • } catch (Exception ex) {
    • ex.printStackTrace();
    • }
    • return result;
    • }
    • }




    1.2 手机信息查看助手功能实现
      1.2.1 手机信息查看助手主界面
      按照预设的规划,将4类信息的查看入口放在主界面上,其布局文件为main.xml,基本上是用一个列表组件组成的,实现代码如下所示:
      在这里main.xml中使用的是LinearLayout布局,其中放置了一个ListView组件。

    Java代码:

    • < ?xml version="1.0" encoding="utf-8"?>
    • < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    • android:/orientation="vertical" android:layout_width="fill_parent"
    • android:layout_height="fill_parent">
    • < ListView
    • android:layout_width="fill_parent"
    • android:layout_height="fill_parent"
    • android:id="@+id/itemlist" />
    • < /LinearLayout>




    1.2.2 查看系统信息实现
      当在运行的主界面单击第一行时,也就是“系统信息”这一行,将执行代码如下:


    Java代码:

    • case 0:
    • intent.setClass(eoeInfosAssistant.this, System.class);
    • startActivity(intent);
    • break;



    代码运行后将显示系统(System)这个界面,这就是查看系统信息的主界面,其和主界面差不多,也就是列表显示几个需要查看的系统信息

      1.2.2.1 操作系统版本
      单击图界面第一行“操作系统版本”项,则会打开一个新的界面,其对应的是ShowInfo.java文件,然后需要显示该设备的操作系统版本信息,而这个信息在/proc/version中有,可以直接调用。在可行性分析中给出的CMDExencute类来调用系统的cat命令获取该文件的内容,实现代码如下:

    Java代码:

    • public static String fetch_version_info() {
    • String result = null;
    • CMDExecute cmdexe = new CMDExecute();
    • try {
    • String[ ] args = {"/system/bin/cat", "/proc/version"};
    • result = cmdexe.run(args, "system/bin/");
    • } catch (IOException ex) {
    • ex.printStackTrace();
    • }
    • return result;
    • }




    上述代码使用的是CMDExecute类,调用系统的“"/system/bin/cat"”工具,获取“"/proc/version"”中内容。从图中显示的查寻结果可以看到,这个设备的系统版本是Linux version 2.6.25-018430-gfea26b0。
    1.2.2.2 系统信息

    在Android中,想要获取系统信息,可以调用其提供的方法System.getProperty(propertyStr),而系统信息诸如用户根目录(user.home)等都可以通过这个方法获取,实现代码如下:


    Java代码:

    • public static StringBuffer buffer = null;
    • private static String initProperty(String description,String propertyStr) {
    • if (buffer == null) {
    • buffer = new StringBuffer();
    • }
    • buffer.append(description).append(":");
    • buffer.append (System.getProperty(propertyStr)).append(" ");
    • return buffer.toString();
    • }
    • private static String getSystemProperty() {
    • buffer = new StringBuffer();
    • initProperty("java.vendor.url","java.vendor.url");
    • initProperty("java.class.path","java.class.path");
    • return buffer.toString();
    • }



    上述代码主要是通过调用系统提供的System.getProperty方法获取指定的系统信息,并合并成字符串返回。

      1.2.2.3 运营商信息

      运营商信息中包含IMEI、手机号码等,在Android中提供了运营商管理类(TelephonyManager),可以通过TelephonyManager来获取运营商相关的信息,实现的关键代码如下:

    Java代码:

    • public static String fetch_tel_status(Context cx) {
    • String result = null;
    • TelephonyManager tm = (TelephonyManager) cx.getSystemService(Context.TELEPHONY_SERVICE);
    • String str = " ";
    • str += "DeviceId(IMEI) = " + tm.getDeviceId() + " ";
    • str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion()+" ";
    • // TODO: Do something ...
    • int mcc = cx.getResources().getConfiguration().mcc;
    • int mnc = cx.getResources().getConfiguration().mnc;
    • str +="IMSI MCC (Mobile Country Code): " +String.valueOf(mcc) + " ";
    • str +="IMSI MNC (Mobile Network Code): " +String.valueOf(mnc) + " ";
    • result = str;
    • return result;
    • }



    在上述的代码中,首先调用系统的getSystemService (Context.TELEPHONY_SERVICE)方法获取一个TelephonyManager对象tm,进而调用其方法 getDeviceId()获取DeviceId信息,调用getDeviceSoftware Version()获取设备的软件版本信息等。

      1.2.3 查看硬件信息
      1.2.3.1 获取CPU信息

      可以在手机设备的/proc/cpuinfo中获取CPU信息,调用CMDEexecute执行系统的cat的命令,取/proc/cpuinfo的内容,显示的就是其CPU信息,实现代码如下:

    Java代码:

    • public static String fetch_cpu_info() {
    • String result = null;
    • CMDExecute cmdexe = new CMDExecute();
    • try {
    • String[ ] args = {"/system/bin/cat", "/proc/cpuinfo"};
    • result = cmdexe.run(args, "/system/bin/");
    • Log.i("result", "result=" + result);
    • } catch (IOException ex) {
    • ex.printStackTrace();
    • }
    • return result;
    • }



    上述代码使用CMDExecute,调用系统中的"/system/bin/cat"命令查看"/proc/cpuinfo"中的内容,即可得到CPU信息。
    1.2.3.2 获取内存信息

      获取内存信息的方法和获取CPU信息的实现差不多,可以读取/proc/meminfo信息,另外还可以通过getSystemService(Context.ACTIVIT_SERV-

      ICE)获取ActivityManager.MemoryInfo对象,进而获取可用内存信息,主要代码如下:

    Java代码:

    • /**
    • *系统内存情况查看
    • */
    • public static String getMemoryInfo(Context context) {
    • StringBuffer memoryInfo = new StringBuffer();
    • final ActivityManager activityManager =(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    • ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo();
    • activityManager.getMemoryInfo(outInfo);
    • memoryInfo.append(" Total Available Memory :").append(outInfo.availMem >> 10).append("k");
    • memoryInfo.append(" Total Available Memory :").append(outInfo.availMem >> 20).append("k");
    • memoryInfo.append(" In low memory situation:").append(outInfo.lowMemory);
    • String result = null;
    • CMDExecute cmdexe = new CMDExecute();
    • try {
    • String[ ] args = {"/system/bin/cat", "/proc/meminfo"};
    • result = cmdexe.run(args, "/system/bin/");
    • } catch (IOException ex) {
    • Log.i("fetch_process_info","ex=" + ex.toString());
    • }
    • return (memoryInfo.toString() + " " + result);
    • }



    上述代码中首先通过ActivityManager对象获取其可用的内存,然后通过查看“/proc/meminfo”内容获取更详细的信息。

      1.2.3.3 获取磁盘信息

      手机设备的磁盘信息可以通过df命令获取,所以,这里获取磁盘信息的方法和前面类似,惟一不同的是,这个是直接执行命令,获取其命令的返回就可以了,关键代码如下:

    Java代码:

    • //磁盘信息
    • public static String fetch_disk_info() {
    • String result = null;
    • CMDExecute cmdexe = new CMDExecute();
    • try {
    • String[ ] args = {"/system/bin/df"};
    • result = cmdexe.run(args, "/system/bin/");
    • Log.i("result", "result=" + result);
    • } catch (IOException ex) {
    • ex.printStackTrace();
    • }
    • return result;
    • }




    1.2.3.4 获取网络信息

      要获取手机设备的网络信息,只要读取/system/bin/netcfg中的信息就可以了,关键代码如下:

    Java代码:

    • public static String fetch_netcfg_info() {
    • String result = null;
    • CMDExecute cmdexe = new CMDExecute();
    • try {
    • String[ ] args = {"/system/bin/netcfg"};
    • result = cmdexe.run(args, "/system/bin/");
    • } catch (IOException ex) {
    • Log.i("fetch_process_info","ex=" + ex.toString());
    • }
    • return result;
    • }




    1.2.3.5获取显示屏信息

      除了显示手机的CPU、内存、磁盘信息外,还有个非常重要的硬件,显示屏。在Android中,它提供了DisplayMetrics类,可以通过getApplication Context()、getResources()、getDisplayMetrics()初始化,进而读取其屏幕宽(widthPixels)、高(heightPixels)等信息,实现的关键代码如下:

    Java代码:

    • public static String getDisplayMetrics(Context cx) {
    • String str = "";
    • DisplayMetrics dm = new DisplayMetrics();
    • dm = cx.getApplicationContext().getResources().getDisplayMetrics();
    • int screenWidth = dm.widthPixels;
    • int screenHeight = dm.heightPixels;
    • float density = dm.density;
    • float xdpi = dm.xdpi;
    • float ydpi = dm.ydpi;
    • str += "The absolute width: " + String.valueOf(screenWidth) + "pixels ";
    • str += "The absolute heightin: " + String.valueOf(screenHeight) + "pixels ";
    • str += "The logical density of the display. : " + String.valueOf(density) + " ";
    • str += "X dimension : " + String.valueOf(xdpi) +"pixels per inch ";
    • str += "Y dimension : " + String.valueOf(ydpi) +"pixels per inch ";
    • return str;
    • }



    1.2.4 查看软件信息

      在Android上,可以在手机上随便安装自己喜欢的应用软件,查看软件信息的功能就是收集并显示已经安装的应用软件信息。Android 提供了getPackageManager()、getInstalledApplications(0)方法,可以直接返回全部已经安装的应用列表。这个功能就是只需要获取列表,再进行显示在列表中就可以了。但是,如果安装的软件比较多,那么获取信息所花费的时间会比较多,为了更好地完善用户使用的体验,在获取列表时,需要在界面提示用户耐心等待,这就需要用到Android提供的另外一个功能Runnable。


      引入Runnable比较简单,只需要在定义类的时候实现Runnable接口就可以了,所以,这里的软件信息查看界面对应的Software.java类声明代码如下:

    Java代码:

    • public class Software extends Activity implements Runnable {
    • }



    然后需要在这个Activity启动的时候,引入进度条ProgressDialog来显示一个提示界面,onCreate代码如下所示:

    Java代码:

    • public void onCreate(Bundle icicle) {
    • Super.onCreate(icicle);
    • setContentView(R.layout.softwares);
    • setTitle("软件信息");
    • itemlist = (ListView) findViewById(R.id.itemlist);
    • pd = ProgressDialog.show(this, "请稍候. .", "正在收集你已经安装的软件信息. . .", true, false);
    • Thread thread = new Thread(this);
    • thread.start();
    • }




    该方法创建了一个ProgressDialog,并设定其提示信息。然后实现其线程的run()方法,该方法实现其真正执行的逻辑,实现代码如下:

    Java代码:

    • @Override
    • Public void run() {
    • fetch_installed_apps();
    • handler.sendEmptyMessage(0);
    • }




    上述代码调用自定义的fetch_installed_app()方法获取已经安装的应用信息,这个方法是比较消耗时间的,实现代码如下:

    Java代码:

    • public ArrayList fetch_installed_apps () {
    • List< ApplicationInfo> packages = getPackageManager().getInstalledApplications(0);
    • ArrayList< HashMap< String, Object>> list = new ArrayList< HashMap< String, Object>>(packages.size());
    • Iterator< ApplicationInfo> l = packages.iterator();
    • while (l.hasNext()) {
    • HashMap< String, Object> map = new HashMap< String, Object>();
    • ApplicationInfo app = (ApplicationInfo) l.next();
    • String packageName = app.packageName;
    • String label = " ";
    • try {
    • label = getPackageManager().getApplicationLabel(app).toString();
    • } catch (Exception e) {
    • Log.i("Exception", e.toString()
    • );
    • }
    • map = new HashMap< String, Object>();
    • map.put("name", label);
    • map.put("desc", packageName);
    • list.add(map);
    • }
    • return list;
    • }



    上述代码使用getPackageManager().getInstalledApplications(0)获取已经安装的软件信息,进而构造用来显示的列表(List)对象,同时,界面通过进度条(ProgressDialog)显示提示信息。

      当这个方法运行完成后,会调用handler.sendEmptyMessage(0)语句给handler发送一个通知消息,使其执行下面的动作,下面就是这个handler的实现方法:

    Java代码:

    • private Handler handler = new Handler() {
    • public void handleMessage msg) {
    • refreshListItems();
    • pd.dismiss();
    • };
    • }



    上述代码中,当其接收到run()线程传递的消失后,先调用refreshListItems()方法显示列表,最后调用进度条ProgressDialog的dismiss方法使其等待提示消失。而refreshListItems()的实现代码如下:

    Java代码:

    • private void refreshListItems() {
    • list = fetch_installed_apps();
    • SimpleAdapter notes = new SimpleAdater(this, list, R.layout.info_row,new String[] {"name", "desc"},new int[] {R.id.name, R.id.desc});
    • list.setAdapter(notes);
    • setTitle("软件信息,已经安装" + list.size()+"款应用.");
    • }



    这些代码,显示已经安装的应用列表的同时,在Title上显示一共安装了多少款应用.

    1.2.5 获取运行时信息

      运行时的一些信息,包括后台运行的Service、Task,以及进程信息。


      1.2.5.1 获取正在运行的Service信息

      可以通过调用context.getSystemService(Context.ACTIVITY_SERVICE)获取 ActivityManager,进而通过系统提供的方法getRunningServices(int maxNum)获取正在运行的服务列表(RunningServiceInfo),再对其结果进一步分析,得到服务对应的进程名及其他信息,实现的关键代码如下:

    Java代码:

    • //正在运行的服务列表
    • public static String getRunningServicesInfo(Context context) {
    • StringBuffer serviceInfo = new StringBuffer();
    • final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context. ACTIVITY_SERVICE);
    • List< RunningServiceInfo> services = activityManager.getRunningServices(100);
    • Iterator< RunningServiceInfo> l = services.iterator();
    • while (l.hasNext()) {
    • RunningServiceInfo si = (RunningServiceInfo) l.next();
    • serviceInfo.append("pid: ").append(si.pid);
    • serviceInfo.append(" process: ").append(si. process);
    • serviceInfo.append(" service: ").append(si. service);
    • serviceInfo.append(" crashCount: ").append(si. crashCount);
    • serviceInfo.append(" clicentCount: ").append(si.clientCount);
    • serviceInfo.append(" activeSince:").append(ToolHelper.formatData(si.activeSince));
    • serviceInfo.append(" lastActivityTime: ").append(ToolHelper.formatData(si.lastActivityTime));
    • serviceInfo.append(" ");
    • }
    • return serviceInfo.toString();
    • }



    上述代码调用activityManager.getRunningServices(100)获取正在运行的服务,并依次遍历得到每个服务对应的pid,进程等信息.

      1.2.5.2 获取正在运行的Task信息

      获取正在运行的Task信息调用的是activityManager.getRunningTasks(int maxNum)来获取对应的正在运行的任务信息列表(RunningTaskInfo),进而分析、显示任务信息,其关键代码如下:

    Java代码:

    • public static String getRunningTaskInfo(Context context) {
    • StringBuffer sInfo = new StringBuffer();
    • final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context. ACTIVITY_SERVICE);
    • List< RunningTaskInfo> tasks = activityManager.getRunningTasks(100);
    • Iterator< RunningTaskInfo> l = tasks.iterator();
    • while (l.hasNext()) {
    • RunningTaskInfo ti = (RunningTaskInfo) l.next();
    • sInfo.append("id: ").append(ti.id);
    • sInfo.append(" baseActivity: ").append(ti. baseActivity.flattenToString());
    • sInfo.append(" numActivities: ").append(ti. nnumActivities);
    • sInfo.append(" numRunning: ").append(ti. numRunning);
    • sInfo.append(" description: ").append(ti. description);
    • sInfo.append(" ");
    • }
    • return sInfo.toString();
    • }



    上述代码调用系统提供的activityManager.getRunningTasks(100)方法获取任务列表,依次获取对应的id等信息,运行效果如图22。从图中显示可以看出,获取手机上正在运行的Task的列表和其对应的进程信息,这对用户了解设备运行情况非常有用。

      1.2.5.3 获取正在运行的进程信息

      该段程序是通过CMD Execute的方式来运行系统命令。关键代码如下:

    Java代码:

    • public static String fetch_process_info() {
    • Log.i("fetch_process_info","start. . . . ");
    • String result = null;
    • CMDExecutr cmdexe = new CMDExecute();
    • try {
    • String [ ] args = {"/system/bin/top", "-n", "1"};
    • result = cmdexe.run(args, "/system/bin/");
    • } catch (IOException ex) {
    • Log.i("fetch_process_info","ex=" + ex.toString());
    • }
    • return result;
    • }



    通过这个功能可以非常详细地了解到正在运行的进程和各个进程所消耗的资源情况。

      1.2.6 文件浏览器

      文件浏览器的这个功能,用户可以遍历浏览整个文件系统,以便更好地了解手机设备状况。在主界面单击最后一行将执行下列代码:

    Java代码:

    • case 4:
    • intent.setClass(eoeInfosAssistant.this, FSExplorer.class);
    • startActivity(intent);
    • break;



    对于如何进入子目录,并获取和显示其内部的文件夹和文件,也就是单击每行时响应的实现,代码如下:

    Java代码:

    • @Override
    • public void onItemClick(AdapterView< ?> parent, View v, int position, long id) {
    • Log.i(TAG, "item clicked! [" + position + "]");
    • if (position == 0) {
    • path = "/";
    • refreshListItems(path);
    • }else if(position ==1) {
    • goToParent();
    • } else {
    • path = (String) list.get(position).get("path");
    • File file = new File(path);
    • if (file.isDirectory())
    • refreshListItems(path);
    • else
    • Toast.makeText(FSExplorer.this,getString(R.string.is_file), Toast.LENGTH_SHORT).show();
    • }
    • }

     

     

    //获取APK的基本信息

    public void getApkInfo(){
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo pi : packs)
    {
    String apkName=pi.applicationInfo.loadLabel(getPackageManager()).toString();
    String apkVerName=pi.versionName;
    int apkVerCode= pi.versionCode;
    Drawable icon = pi.applicationInfo.loadIcon(getPackageManager());
    String packageName = pi.packageName;
    String ff =pi.applicationInfo.publicSourceDir;//=/system/framework/framework-res.apk /data/app/cn.findmm-1.apk
    String apkSize = formetFileSize((new File(pi.applicationInfo.publicSourceDir)).length());

    }
    }

    //根据应用名获取应用版本号
    public String getInstallAppPackageVersion()
    {
    String s="UC浏览器";
    String s1;
    List list;
    int i;
    s1 = null;
    list = getPackageManager().getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);

    for(i = 0;i<list.size();i++){
    PackageInfo packageinfo = (PackageInfo)list.get(i);
    String s2 = packageinfo.applicationInfo.loadLabel(getPackageManager()).toString();
    if (packageinfo.applicationInfo.publicSourceDir.contains("/data/app") && s.equals(s2))
    {
    s1 = packageinfo.versionName;
    break;
    }
    }
    return s1;

    }

    //由包名com.google.android.googlequicksearchbox 得到APK文件的路径名/system/app/Velvet.apk
    public String getApkFile(){
    String s="com.google.android.googlequicksearchbox";
    String s1;
    String as[];
    int i;
    s1 = null;
    as = (new File("/system/app/")).list();

    for(i=0;i < as.length;i++){
    if (getApkPackageName((new StringBuilder("/system/app/")).append(as[i]).toString()).contains(s)){
    return s1 = (new StringBuilder("/system/app/")).append(as[i]).toString();//Velvet.apk
    }
    }
    return s1;
    }


    public String getApkPackageName(String s)
    {
    PackageInfo packageinfo = getPackageManager().getPackageArchiveInfo(s, 1);
    String s1 = null;
    if (packageinfo != null)
    {
    s1 = packageinfo.applicationInfo.packageName;
    }
    return s1;
    }

     

     

     

    展开全文
  • 这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。实现API接口...
  •  这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。...
  • Android 怎样获得手机信息(一)

    千次阅读 2011-04-27 15:00:00
     这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。...
  • TSS000048开发伙伴平台: Series 80设备, 软件版本: 无大类: Symbian C++子类: 普通说明:使用以下的步骤你就可以浏览Z盘驱动器的内容:1,打开文件管理器2,用键盘输入“++sp”并看到右上角会显示信息3,打开从...
  • 安装软件的时候很多用户遇到如下情况: “xxx”因为出现问题而无法打开。请与开发者联系,以确定“xxx”可以配合Macos版本使用。您可能需要重新安装应用程序。...那么问题来了,怎样查看我的Mac是否关闭了
  • 安装软件的时候很多用户遇到如下情况: “xxx”因为出现问题而无法打开。请与开发者联系,以确定“xxx”可以配合Macos版本使用。您可能需要重新安装应用程序。...那么问题来了,怎样查看我的Mac是否关闭了s
  • 另外,请升级用户注意:由于软件的最新版本,在旧版本的基础上增加了新的功能,而且新旧版本的数据格式不同。在此特别强调:软件升级以后不能将老的备份数据恢复到新版本软件中。本升级程序将自动对原有的帐本信息...
  • 版本FormatRecovery,为 O&O 软件提供了最终的补充,进一步丰富了数据恢复产品线。它使用相当方便,由界面上的助手指引,宽带连接慢怎么办 可以将误删除或格式化后的分区及硬盘恢复到误操作之前的状态,文件和目录...
  • 安装软件的时候很多用户遇到如下情况: “xxx...点按“报告”以查看更详细的信息,并将报告发送给 Apple。Mac电脑怎样关闭sip,苹果电脑关闭系统完整性保护SIP的方法教程​www.macw.com怎么办?那可能是你的Mac电脑s...
  • 安装软件的时候很多用户遇到...点按“报告”以查看更详细的信息,并将报告发送给 Apple。怎么办?那可能是你的Mac电脑sip系统完整性没有关闭,至于什么是sip系统完整性保护小编这里不说了,主要分享Mac电脑怎样关闭...
  • Windows10 ※※※查看

    2015-10-08 12:13:43
    那么怎样查看 Windows 10 的安装激活序列号 Key 密钥? 想要找出电脑升级后的 Windows 10 系统序列号安装 Key 其实非常简单,我们只需使用这个“Windows 10 序列号查看器”即可。它非常简单,下载后双击后就会显示...
  • Ghost 8.3 系统备份软件

    2009-11-13 10:29:50
    在以前的 Ghost版本中,我们只能对整个系统进行简单的备份、复制、还原,要恢复单个的文件和文件夹还要使用外带的 GhostEXP 软件。现在,Symantec 公司已经将 Ghost 浏览器整合在软件中。Ghost 浏览器采用类似于...
  • 实例289 获取IE浏览器版本信息 388 实例290 设置IE浏览器的默认主页 388 实例291 禁止修改IE浏览器主页 389 8.4 应用软件设置 390 实例292 建立数据文件与程序的关联 390 实例293 使应用程序开机...
  • 这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。 处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,...
  • 点按“报告”以查看更详细的信息,并将报告发送给 Apple。 怎么办?那可能是你的Mac电脑sip系统完整性没有关闭,至于什么是sip系统完整性保护小编这里不说了,主要分享M1 Mac怎样关闭sip,带给你M1芯片苹果电脑...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 130
精华内容 52
关键字:

怎样查看软件版本信息