3.1 ddmlib实现Android设备的监听

谷歌的ddmlib包提供了解决方案。
AndroidDebugBridge实现设备监听。
IDevice实现设备信息获取。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本节实例在maven工程配置
本节示例AndroidDebugBridge

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

pom.xml

<dependency>
    <groupId>com.android.tools.ddms</groupId>
    <artifactId>ddmlib</artifactId>
    <version>25.3.0</version>
</dependency>

用到: init(false); createBridge();

MyDevices.java

public class MyDevice {
	/*
	 * 获取当前所连接设备的信息
	 */
	public IDevice[] iDevice() {
		//初始化ddmlib
		AndroidDebugBridge.init(false);
		//创建debug bridge
		AndroidDebugBridge adb = AndroidDebugBridge.createBridge();//等待获取到设备
//		AndroidDebugBridge adb = AndroidDebugBridge.createBridge(
//				"F:\\Android\\android-sdk\\platform-tools\\adb.exe",false);
		
		waitForDevice(adb);
		
		return adb.getDevices();
	}
	/*
	 * 设置等待时间,直到获取到设备信息。
	 * 等待超过0.3秒,抛出异常
	 */
	private static void waitForDevice(AndroidDebugBridge bridge) {
		int count = 0;
		while(!bridge.hasInitialDeviceList()) {
			try {
				Thread.sleep(100);
				count++;
			} catch(InterruptedException ignored) {		
			}
			if(count>300) {
				System.out.println("Time out");
				break;
			}
		}
	}
}

App.java

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello AutoTest!" );
        MyDevice mDevice = new MyDevice();
        for(IDevice iDevice : mDevice.iDevice()) {
        	System.out.println("获取当前设备 " + iDevice);
        }   
    }
}

结果如下:
在这里插入图片描述

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
检测adb版本

pom.xml

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.1-jre</version>
</dependency>
Guava 定义了 ListenableFuture接口并继承了JDK concurrent包下的Future接口,
ListenableFuture 允许你注册回调方法(callbacks),在运算(多线程执行)完成的时候进行调用, 
或者在运算(多线程执行)完成后立即执行。
这样简单的改进,使得可以明显的支持更多的操作,这样的功能在JDK concurrent中的Future是不支持的。 
在高并发并且需要大量Future对象的情况下,推荐尽量使用ListenableFuture来代替..

ListenableFuture 中的基础方法是addListener(Runnable, Executor), 该方法会在多线程运算完的时候,
在Executor中执行指定的Runnable。
//用到的类
AndroidDebugBridge
ListenableFuture<AdbVersion>//此接口在guava.jar中
//用到的函数
getAdbVersion(@NonNull final File adb)

MyDevices.java

/*
	 * 获取adb版本
	 */
	public AdbVersion getAdbVersion() {
		File adbVer = new File("F:\\Android\\android-sdk\\platform-tools\\adb.exe");
        ListenableFuture<AdbVersion> future = AndroidDebugBridge.getAdbVersion(adbVer);
        AdbVersion version = null;
        try {
        	/*
        	* TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep()
        	* 例:TimeUnit.MINUTES.sleep(4);  // sleeping for 4 minutes
        	* 指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS
        	*/
        	version = future.get(5, TimeUnit.SECONDS);
        } catch (InterruptedException | ExecutionException | TimeoutException e) {
            return version;
        }
        return version;
	}

App.java

    private static AdbVersion AdbVersion;

	public static void main( String[] args )
    {
        System.out.println( "Hello Springboot!" );
        MyDevice mDevice = new MyDevice();
        AdbVersion = mDevice.getAdbVersion();
        System.out.println("当前adb版本: " + AdbVersion.toString());
        for(IDevice iDevice : mDevice.iDevice()) {
        	System.out.println("获取当前设备 " + iDevice);
        }   
    }

结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值