关闭

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

250人阅读 评论(0) 收藏 举报
分类:


首先使用 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();


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34428次
    • 积分:440
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:14篇
    • 译文:0篇
    • 评论:3条
    最新评论