安卓 在任意地方启动另一个AP…



首先使用 dumpsys 查看另一个App 的名称

(1)首先启动要查看的程序,到该程序上;

(2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=

就能得到类似下面这样的信息

      mSurface=Surface(name=com.nvidia.tegrazone3/com.nvidia.tegrazone.MainActivity)

或者输入  adb shell "dumpsys activity | grep Focus"

然后就是在程序中定义

String AppNames = “com.nvidia.tegrazone3/com.nvidia.tegrazone.MainActivity”;

然后用adb 命令(搜 android 通过命令行启动Apk

adb shell am start -a android.intent.action.MAIN -n com.android.calculator2/com.android.calculator2.Calculator

即可启动

String[] SwitchAppCMD = { "am", "start", "-a",

                "android.intent.action.MAIN", "-n", AppNames };


ProcessHelper.Execute(SwitchAppCMD);


在程序中我写了一段封装好的直接用的执行adb命令的函数ProcessHelper.Execute。主要内容是下面这句

public static List Execute(String[] aryCmd, boolean printOutput){

。。。。。

Process proc = Runtime.getRuntime().exec(aryCmd);

}



public class ProcessHelper {


    public static List Execute(String[] aryCmd) throws IOException,

            InterruptedException {

        return Execute(aryCmd, true);

    }


    public static List Execute(String[] aryCmd, boolean printOutput)

            throws IOException, InterruptedException {

        List lstResult = new ArrayList();

        CommonWriter.WriteLine("Run command: " + Arrays.toString(aryCmd));

        Process proc = Runtime.getRuntime().exec(aryCmd);

        LineNumberReader lnr = new LineNumberReader(new InputStreamReader(

                proc.getInputStream()));

        String outputLineine;

        // clear input stream before proc.waitFor()

        while ((outputLineine = lnr.readLine()) != null) {

            if (!Arrays.toString(aryCmd).startsWith("[dumpsys")) {

                if (printOutput)

                    System.out.println(outputLineine);

            }

            lstResult.add(outputLineine);

        }

        int exitVal = proc.waitFor();

        CommonWriter.WriteLine("Exit value: " + exitVal);

        if (printOutput)

            System.out.println("===== Output =====");

        while ((outputLineine = lnr.readLine()) != null) {

            if (!Arrays.toString(aryCmd).startsWith("[dumpsys")) {

                if (printOutput)

                    System.out.println(outputLineine);

            }

            lstResult.add(outputLineine);

        }

        if (printOutput)

            System.out.println("==================");

        lnr.close();

        proc.destroy();

        proc = null;

        return lstResult;

    }


    public static void ExecuteOnbackground(String[] aryCmd) throws IOException {

        CommonWriter.WriteLine("Run command: " + Arrays.toString(aryCmd));

        Runtime.getRuntime().exec(aryCmd);

    }


    public static boolean IsProcessAlive(Process p) {

        try {

            p.exitValue();

            return false;

        } catch (IllegalThreadStateException e) {

            return true;

        }

    }

 

}



如果只有一个的话,貌似要加waitfor

Process proc = Runtime.getRuntime().exec("date");

 

proc.waitFor();


阅读更多
个人分类: JAVA
上一篇从STL容器的使用对比,研究hashmap…
下一篇C++ 排列组合
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭