QQ手机精灵 http://www.apkbus.com/blog-33641-44366.html

news/2024/12/11 22:33:00/

http://www.apkbus.com/blog-33641-44366.html

最近在使用腾讯手机管家for Android的时候发现,通过USB连接品PC和手机,启动PC端腾讯手机管家,发现当手机端未安装腾讯手机精灵时会自动安装,如果已安装,会自动连接上。

研究了一下,发现原理其实很简单,只需要一行命令即可搞定,即依靠强大的adb命令之adb shell am start命令

  [adb shell am start]

·    -n <package_name>/.<activity_class_name>

作用:启动一个activity

  例如:

    adb shell am start -n  com.qq.AppService/com.qq.AppService.MainView

 

 通过启动腾讯手机精灵的主activity来检测手机端是否安装该应用,如果已经安装,则adb shell命令返回的结果:

   Starting: Intent { cmp=com.qq.AppService/.MainView }

 或者

   Starting: Intent { cmp=com.qq.AppService/.MainView }

   Warning: Activity not started, its current task has been brought to the front

 

如果未安装,则返回的结果是:

    Starting: Intent { cmp=com.qq.AppService/.MainView }

  Error type 3

  Error: Activity class {com.qq.AppService/com.qq.AppService.MainView} does not exist.

    

   通过解析执行adb命令之后返回的结果即可知道是否安装该应用。

    

             

                                 (PC端adb文件路径以及腾讯手机精灵apk包)

               注意:在PC端腾讯手机管家安装路径下也有上述四个文件,不同之处是adb.exe的名字是tadb.exe,

                   应该是腾讯处理adb模块代码编译出的可执行程序(因为tadb.exe文件有496k,也可能只改了个名字)

                   其实把腾讯手机管家安装路径下的tadb.exe名字改成adb.exe也是可以的

        

 

  代码:     

   /**   

     *   目前该函数适合于PC端检查手机端某一个应用是否安装或是否成功安装某一个应用    

     *

     * @param cmdString:adb shell 命令

     *        //adb.exe所在的路径,PC端需要有AdbWinApi.dll AdbWinUsbApi.dll adb.exe

     *        //PC端所有对adb shell命令的操作都需要上述三个文件

     *        String adbPath = "E://wts//adb ";   

     *            

     *        //检查腾讯手机精灵是否安装的命令

     *        // com.qq.AppService/com.qq.AppService.MainView 组件名,其中com.qq.AppService包名,MainViewactivity

              String cmdString = adbPath + "shell am start -com.qq.AppService/com.qq.AppService.MainView";

     *

     *        //安装腾讯手机精灵的命令("E://wts//QQPhoneManager.apk"为手机精灵apk完整路径)

     *        String cmdString = adbPath +"install E://wts//QQPhoneManager.apk";

                 

     * @return  true:表示执行命令成功   

     *          false:执行失败

     *                                

     */

  publicstaticboolean execCommand(String cmdString) {

      

       boolean bFlag = true;

       Process process = null;

       if (cmdString != null && !"".equals(cmdString)) {

           try {

              process = Runtime.getRuntime().exec(cmdString);

              InputStream is = process.getInputStream();

              BufferedReader reader = new BufferedReader(

                     new InputStreamReader(is));

              String line;

              while ((line = reader.readLine()) != null) {

                  System.out.println(line);

                  if (line.contains("Error")) {

                     bFlag = false;

                     break;

                  }

                  //以下代码主要是判断使用adb install xxxx.apk 时是否成功

                  if (line.contains("Success")) {

                     bFlag = true;

                     break;

                  }

              }

              process.waitFor();

              is.close();

              reader.close();

              process.destroy();

           } catch (IOException e) {

              bFlag = false;

           } catch (InterruptedException e) {

              // TODO Auto-generated catch block

              bFlag = false;

           }

       } else {

           bFlag = false;

       }

 

       return bFlag;

    }

 

 

    下面就可以直接根据该函数的返回值来判断是否安装某一个应用,如果未安装,然后直接安装,如果已经安装,直接启动。

 

     String adb_path = "E://wts//adb ";

          String strCmdString = adb_path + "shell am start -n  com.qq.AppService/com.qq.AppService.MainView";

     if (execCommand(strCmdString))

     {

                  System.out.println("已经安装腾讯手机精灵....");

         doSomething();

      }

      else {

                  System.out.println("没有安装腾讯手机精灵....");

         if(execCommand(adb_path + "install E://wts//QQPhoneManager.apk"))

         {

                        System.out.println("安装腾讯手机精灵成功....");

            doSomething();

         }

         else

         {

                        System.out.println("安装腾讯手机精灵失败...");

            doOtherthing();

         }

      }

 

    注意:实际上通过启动service或广播也可以实现检查手机端是否安装某个应用(实际上腾讯手机精灵就是通过adb命令启动service实现的,由于在实际研究测试中发现通过adb shell am startservice启动service成功,但是发现手机中并没有该service,应该是有权限设置吧),但不打算继续研究了,大家有兴趣可以在研究研究,呵呵。

     本文中直接通过启动activity中来实现检测是否安装某一个应用(需要已知组件名)。

 

     后面文章中会讲解

         1  PC端获取Android手机当前屏幕截图的方法(已完成)  

         2  PC端如何解析一个apk文件中得权限信息,icon图标信息等。

        这些都是PC端腾讯手机管家for Android,豌豆荚 91手机助手,apk安装器等常用到的一些功能,结合另一篇文章(

      实现pc端通过usb获取到android手机上的短信、通讯录等信息),你就可以开发出一个属于自己的PC端应用,实现管理手机端的短信、应用等);



http://www.ppmy.cn/news/729125.html

相关文章

按键精灵手机版 代码收藏

导入包&#xff1a; Import "GK.luae" Import "ShanHai.lua" 打开APP并点击几个按钮 Traceprint (sys.GetFront()) // 输出前台的包名 if Sys.GetFront() <> "com.tencent.mm" Then // 如果打开不的是微信RunApp "com.tencent.m…

按键精灵(手机版)对接聊天机器人

天行数据的聊天机器人接口,对接太简单了,get请求,传递key和问题,解析响应json,完事! 天行机器人链接地址 为啥不选图灵?有人可能会问,还不是因为穷,虽然天行数据机器人接口挺便宜,但是个人感觉一点不差图灵.图灵收费是99一个月,一天1000次.天行聊天机器人15元一个月,每天一万条…

抖音 触摸精灵_触控精灵app下载-触控精灵手机版 v1.3.2 - 安下载

触控精灵app是一款可以帮助手机进行自动化操作的应用&#xff0c;app为您准备了许多自动化操作模式&#xff0c;您可以在app中快速下载需要的操作脚本&#xff0c;以后就能让您一键轻松的控制手机&#xff0c;使用手机就会变得非常的便捷&#xff1b;这是一款真正免ROOT就可以进…

系统架构设计师笔记第26期:软件架构演化方式的分类

软件架构的演化是一个渐进的过程&#xff0c;随着时间的推移和需求的变化&#xff0c;软件架构也会发生变化和演化。以下是软件架构演化的几个常见阶段&#xff1a; 初始阶段&#xff1a;软件架构在初始阶段通常较为简单&#xff0c;可能是一个单一的模块或简单的层次结构。这…

设计模式- 一、设计原则-1

一、设计原则 当涉及到软件设计和开发原则时&#xff0c;有一些常见的原则和准则可以帮助我们编写高质量、可维护和可扩展的代码。以下是其中一些重要的原则和准则&#xff1a; SOLID原则&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP…

儿童编程积木

学习机器人编程必须运用到各种知识&#xff0c;包括数学、物理、科学以及自然等课本理论知识&#xff0c;只有熟悉掌握了这些&#xff0c;才能运营一个机器人&#xff0c;让它完成规定的动作。格物斯坦小坦克认为学习机器人就是学习一种机器人编程思维。 基于机器人的科学探究实…

少儿编程教程

当前全世界的老师们都深信“编程是最具创造性&#xff0c;也是最有趣的学习方式&#xff0c;编程的学习内容涵盖了几乎所有重要的少儿教育目标&#xff0c;包括:逻辑思维能力&#xff0c;抽象思维能力&#xff0c;专注力记忆力&#xff0c;问题解决能力&#xff0c;创造力。”格…

python儿童编程例子代码-python儿童编程

广告关闭 2017年12月&#xff0c;云社区对外发布&#xff0c;从最开始的技术博客到现在拥有多个社区产品。未来&#xff0c;我们一起乘风破浪&#xff0c;创造无限可能。 今天偶然发现了一款python入门的理想工具pythonturtle。 非常容易上手&#xff0c;强烈推荐一下。 pytho…