跳出手機的Dialog---Presentation

跳出手機的Dialog—Presentation

本文原創,轉載請經過本人准許。

寫在前面:

Presentation 是 what?
也許你剛看到標題的時候,會默默把這個單詞扔到翻譯工具裏面,就像老大最開始跟我提起這個單詞的時候一樣。

容我想想

Presentation是說明書?
Presentation是一個頒獎典禮?
Presentation還是某賣藥公司UE總監讓所有IT人尷尬癌盡犯的PPT Presentation?

公司做的是智能硬件方向,國內有關Presentation資料幾乎是空白的,所以我的研究更多參考了Presentation官方文檔和一些英文資料。如果各位看官有什麼建議,一定要記得補充。

presentation的定義

好吧,既然上面這些都不是,Presentation是一個類,我們翻過太平洋的牆,來看看Presentation的定義。

A presentation is a special kind of dialog whose purpose is to present content on a secondary display.

我們僅僅先來看這一句定義,因爲當你對一個東西完全不瞭解時候,知道的越多,越會影響你的判斷。

翻譯下:presentation 是一種特殊的 dialog ,目的是爲了在輔助屏幕上展示不同的內容。

在這句話上,我收集到了兩個關鍵的信息:

  • presentation 是一個 dialog
    根據生物遺傳學的角度,presentation 無論被描述成什麼天花亂墜的模樣,它也是一個dialog。

  • presentation 目的是顯示在輔助屏幕上

進一步思考下,也就是說:

我可以拿着我自己的手機,點擊一個按鈕,然後在你的電腦上或者手機上,彈出一個自定義的Dialog腦補一下惡作劇場景O(∩_∩)O)?

這與我們之前,通過一些軟件,將手機屏幕同步到電腦上,區別又在哪裏呢?

相信很多人都能立刻想明白,區別在於:展示不同內容

通過軟件同步到電腦,展示的東西始終與我的手機屏幕相同。

而利用 presentation 我可以自由的展示我想展示的內容,因爲它是一個Dialog,是局部可控的。

尋找並投影到輔助屏幕

產品經理找到我,向我提出了以下幾個疑問:

現在手裏有一部Android手機

能否連接以下幾種設備

  • 另一部Android手機

  • 筆記本電腦

  • 智能電視

  • 小米盒子等

並且連接之後,利用presentation展示不同內容。

我乍一看這幾個設備,感覺都沒問題呀。可是當我拿着手機挨個嘗試,幾次失敗,並且耐心分析之後,發現了問題。

首先Presentation是Android 4.2引出的,與之同時Android 4.2 還支持 Miracast 影像傳輸協議。所以它倆一定是有聯繫的。

Miracast

Miracast簡介

Miracast是一種基於WIFI的傳輸協議,Android 4.2以上的手機、Win8電腦、智能電視、盒子幾乎都是支持它的。

不過Miracast它將設備分爲發送端和接收端
發送端有手機、電腦。
接收端有智能電視、電視盒子。

所以,手機連手機或電腦展示Presentation,是行不通的。手機作爲發射端,去尋找智能電視和盒子纔是正解。

Presentation

終於弄明白了要尋找的設備是怎樣的,建立連接之前,參考官方文檔的樣例,我們先把Presentation給搭建好。

Presentation類

可以看到,和Activity一樣,可以通過setContentView來給Presentation設置一個佈局。自然佈局裏可以有各種各樣的組件,還可以有像GLSurfaceView、SurfaceView 這種重量級的組件,來顯示炫酷的動畫。這裏我們就僅僅寫一個TextView,展示一行“show a Presentation”文字。

值得一提的是,在Presentation中的getContext得到的context與它依附的Activity的context是不同的,Presentation的context是目標屏幕屬性的context,包含着輔助屏幕的屬性信息。

獲取輔助屏幕

獲取輔助屏幕有兩種方式

  • MediaRouter

  • DisplayManager

MediaRouter

利用MediaRouter的API尋找周圍設備是一種最簡單的方式了,它會直接綁定周圍最合適的設備。就相當於你用谷歌搜索直接點擊“手氣不錯

代碼如下:

點擊按鈕,展示Presentation

可以看到在Presentation的構造中,傳入了一個display,這就是搜索到的那個設備

先來測試一下,Android 4.2的手機在開發中選項中,都有模擬輔助屏幕的功能,我們選擇一個分辨率,打開它,模擬一個外部的屏幕。

打開模擬輔助屏幕

默認輔助屏幕是同步手機屏幕的,打開之後,進入測試app,點擊按鈕:

這裏寫圖片描述

注意這可不是一個Dialog,而是我們把內容展示在了一個模擬的輔助屏幕上,回頭看看標題,是不是就實現了呢?

DisplayManager

第二種搜索設備的方法是DisplayManager,他可以搜索周圍所有可用的display,產生一個display數組,然後你就可以選擇合適的設備進行展示了。

代碼如下:

DisplayManager

代碼還是挺簡單的,搜索到周圍所有可用設備之後,展示到ListView上,點擊條目,在APP上和Presentataion上分別跑一個秒錶,看看延時性如何,截圖如下。

DisplayManager

可以看到,搜索到的設備名稱是 疊加視圖#1 ,點擊條目之後兩個秒錶也分別跑了起來。

總結:

上面對Presentation進行了一個簡略的介紹,因爲相信大家如果做的不是智能硬件方向,基本上不會遇到這個需求。關於Activity對Presentation的管理方式,官方文檔的有兩個Demo可以參考,需要時可以去查看。

寫在後面:

週末在連接智能電視測試時,跑秒錶發現延時還是很大的,所以目前考慮是否可以用採用HDMI有線連接的方式來減小延時。
關於Presentation資料比較少,歡迎大家一同交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章