分类 Android 下的文章

Android模拟触控解决方案


数据采集

Android端

重写onTouchEvent,收集event数据,以一定的编码传输

public boolean onTouchEvent(MotionEvent event){
    String rec="";
    int pointerCount = event.getPointerCount();
    if (pointerCount > MAX_TOUCHPOINTS) {
        pointerCount = MAX_TOUCHPOINTS;
    }
    int opt=event.getAction();
    boolean isFirst=true;
    if(opt==2){
        for (int i = 0; i < pointerCount; i++) {
            int id = event.getPointerId(i);
            int x = (int) event.getX(i);
            int y = (int) event.getY(i);
            if(isFirst){isFirst=false;}
            else rec+=";";
            rec+=id+",2,"+x+","+y;
        }
    }else if(opt==0||(opt-5)%256==0){
        //为了简化,我们假设这过程不会进行MOVE
        int ind=(event.getAction()-5)/256;
        for (int i = 0; i < pointerCount; i++) {
            if(i==ind){
                int id = event.getPointerId(i);
                int x = (int) event.getX(i);
                int y = (int) event.getY(i);
                if(isFirst){isFirst=false;}
                else rec+=";";
                rec+=id+",0,"+x+","+y;
                break;
            }
        }
    }else if(opt==1||(opt-6)%256==0){
        int ind=(event.getAction()-6)/256;
        for (int i = 0; i < pointerCount; i++) {
            if(i==ind){
                int id = event.getPointerId(i);
                if(isFirst){isFirst=false;}
                else rec+=";";
                rec+=id+",1";
                break;
            }
        }
    }
    return true;
}


一些面试笔试题_2017校招


1.音视频不同步的原因:

一般是客户端的问题。

由于音视频包都会带上时间戳,出现不同步的根本原因是客户端取出当前数据包解码放入缓冲队列,进行渲染时(在这做同步)不能从缓冲队列中同时找到当前时间戳的视频解码数据和音频解码数据,所以只能先取其中一个拿个渲染。

(注:拿去渲染后,如果时间戳同步,渲染一般不会出现不同步的情况,硬件处理相对成熟);

渲染不同步,可以说是缓冲队列设置太小,没有考虑网络不好数据包传输慢或者需要丢包重传的情况。 当然还有可能是解码的问题,音视频其中之一的解码效率太慢,而缓冲队列设置合适,稍微不好一点的网络情况导致解码数据包(音频or视频)来不及放入缓冲队列。

如果是服务端的问题,比较不好处理。

音视频线程数据采集速度不同步(和采集卡有关),封装协议时就已经出现同一时间戳的音视频包实际是不同步的情况。


adb 控制 avd


1.显示所有avd

android list avd
示例输出
Available Android Virtual Devices:
    Name: Nexus_5_API_23
  Device: Nexus 5 (Google)
    Path: C:\Users\zhengjx\.android\avd\Nexus_5_API_23.avd
  Target: Android 6.0 (API level 23)
 Tag/ABI: google_apis/x86_64
    Skin: nexus_5
  Sdcard: 100M
---------
    Name: Nexus_6
  Device: Nexus 6 (Google)
    Path: C:\Users\zhengjx\.android\avd\Nexus_6.avd
  Target: Android 6.0 (API level 23)
 Tag/ABI: google_apis/x86
    Skin: nexus_6
  Sdcard: 100M


挖一个坑——TabLayout


在使用TabLayout的时候,在Fagment中使用,会发现,TabLayout中的字体不显示,但是在按下home键退出到桌面后,再进入,TabLayout就出现了,如此诡异。先挖个坑,做完毕设再解决。