安卓 在任意地方启动另一个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();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值