久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > Android 4.2 Wifi Display 之 Settings 源碼分析

Android 4.2 Wifi Display 之 Settings 源碼分析

作者: 時間:2016-10-08 來源:網絡 收藏

一、簡單背景

本文引用地址:http://cqxgywz.com/article/201610/305680.htm

簡單背景:隨著無線互聯的深入,不管是藍牙、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_SERVICE);

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的顯示效果,你可以在



關鍵詞:

評論


相關推薦

技術專區

關閉