您的位置 首页 电源

Android 4.2 Wifi Display 之 Settings 源码剖析

一、简单背景简单背景:随着无线互联的深入,不管是蓝牙、WIFI或者各种基于此的规范不管是UPNP还是DLNA都随着用户的需求得到了很大的发展,google 自

一、简略布景

简略布景:跟着无线互联的深化,不管是蓝牙、WIFI或许各种基于此的标准不管是UPNP仍是DLNA都跟着用户的需求得到了很大的开展,google 自从android 4.0引进wifi direct后,又在11月份发布的android 4.2中引进了Miracast无线显现同享,其协议在此能够下载。具体的协议部分内容比较多,自己因为水平有限,就不在这儿罗列协议的内容了,只附上一份架构图供我们对其有个大致的形象。

英文缩写对应如下:

HIDC: Human Interface Device Class

UIBC: User Input Back Channel

PES: Packetized Elementary Stream

HDCP: High-bandwidth Digital Content Protection

MPEG2-TS: Moving Picture Experts Group 2 Transport Stream

RTSP: Real-Time Streaming Protocol

RTP: Real-time Transport Protocol

Wi-Fi P2P: Wi-Fi Direct

TDLS: Tunneled Direct Link Setup

二、运用层简介

好了,接下来首要来看一看android 4.2 供给了哪些与其相关的运用:

首要,需求留意的自然是API文档中发布的 http://developer.android.com/about/versions/android-4.2.html#SecondaryDisplays

Presentation运用,在源码中途径为:development/samples/ApiDemos/src/com/example/android/apis/app/下面的两个文件

PresentationActivity.java

以及 PresentationWithMediaRouterActivity.java 。

这两个运用所运用的Presentation基类在frameworks/base/core/java/android/app/Presentation.java,能够看到其承继了dialog类,并复用了如show()以及cancel()函数。

因为官方文档已经有了关于Presentation以及MediaRouter的扼要介绍,这儿先不再结合framework层具体介绍,今后有时机一并再结合源码剖析一下。

简略来说,Display Manager 能够列举出能够直连显现的多个设备,MediaRouter供给了快速取得体系中用于演示(presentations)默许显现设备的办法。能够使用

frameworks/base/media/java/android/media /MediaRouter.java下的getSelectedRoute(int type){ }函数来取得当时所挑选type类型的Router信息。关于PresentationWithMediaRouterActivity运用而言,

[java] view plaincopy

MediaRouter mMediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERV%&&&&&%E);

MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);

Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;

能够看到这儿传入的是ROUTE_TYPE_LIVE_VIDEO类型,供其获取已挑选的 route信息。之后,则是判别route信息是否为空,假如不为空则回来被挑选演示(presentation)设备。值得一提的是,该办法只对 route信息类型为ROUTE_TYPE_LIVE_VIDEO有用。

接下来,只需将该Display目标作为自己重构的演示(Presentation)类结构函数参数传入,这样自己重构的演示就会出现在第二个显现设备上。

[java] view plaincopy

mPresentation = new DemoPresentation(this, presentationDisplay);

try {

mPresentation.show();

} catch (WindowManager.InvalidDisplayException ex) {

Log.w(TAG, Couldn’t show presentation! Display was removed in

+ the meantime., ex);

mPresentation = null;

}

}

[java] view plaincopy

private final static class DemoPresentation extends Presentation {

public DemoPresentation(Context context, Display display) {

super(context, display);

}

}

为了进一步优化附加显现设备自定义演示UI的显现作用,你能够在

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/298027.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部