跳出手機(jī)的Dialog--Presentation

跳出手機(jī)的Dialog--Presentation

本文原創(chuàng),轉(zhuǎn)載請(qǐng)經(jīng)過本人準(zhǔn)許。

寫在前面:

Presentation 是 what?
也許你剛看到標(biāo)題的時(shí)候,會(huì)默默把這個(gè)單詞扔到翻譯工具里面,就像老大最開始跟我提起這個(gè)單詞的時(shí)候一樣。

容我想想

presentation的定義

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

我們僅僅先來看這一句定義,因?yàn)楫?dāng)你對(duì)一個(gè)東西完全不了解時(shí)候,知道的越多,越會(huì)影響你的判斷。

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

在這句話上,我收集到了兩個(gè)關(guān)鍵的信息:

  • presentation 是一個(gè) dialog
    根據(jù)生物遺傳學(xué)的角度,presentation 無論被描述成什么天花亂墜的模樣,它也是一個(gè)dialog。

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

進(jìn)一步思考下,也就是說:

我可以拿著我自己的手機(jī),點(diǎn)擊一個(gè)按鈕,然后在你的電腦上或者手機(jī)上,彈出一個(gè)自定義的Dialog腦補(bǔ)一下惡作劇場(chǎng)景O(∩_∩)O)?

這與我們之前,通過一些軟件,將手機(jī)屏幕同步到電腦上,區(qū)別又在哪里呢?

相信很多人都能立刻想明白,區(qū)別在于:展示不同內(nèi)容

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

而利用 presentation 我可以自由的展示我想展示的內(nèi)容,因?yàn)樗且粋€(gè)Dialog,是局部可控的。

尋找并投影到輔助屏幕

產(chǎn)品經(jīng)理找到我,向我提出了以下幾個(gè)疑問:

現(xiàn)在手里有一部Android手機(jī)

能否連接以下幾種設(shè)備

  • 另一部Android手機(jī)

  • 筆記本電腦

  • 智能電視

  • 小米盒子等

并且連接之后,利用presentation展示不同內(nèi)容。

我乍一看這幾個(gè)設(shè)備,感覺都沒問題呀。可是當(dāng)我拿著手機(jī)挨個(gè)嘗試,幾次失敗,并且耐心分析之后,發(fā)現(xiàn)了問題。

首先Presentation是Android 4.2引出的,與之同時(shí)Android 4.2 還支持 Miracast 影像傳輸協(xié)議。所以它倆一定是有聯(lián)系的。

Miracast

Miracast簡(jiǎn)介

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

不過Miracast它將設(shè)備分為發(fā)送端和接收端
發(fā)送端有手機(jī)、電腦。
接收端有智能電視、電視盒子。

所以,手機(jī)連手機(jī)或電腦展示Presentation,是行不通的。手機(jī)作為發(fā)射端,去尋找智能電視和盒子才是正解。

Presentation

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

Presentation類

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

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

獲取輔助屏幕

獲取輔助屏幕有兩種方式

  • MediaRouter

  • DisplayManager

MediaRouter

利用MediaRouter的API尋找周圍設(shè)備是一種最簡(jiǎn)單的方式了,它會(huì)直接綁定周圍最合適的設(shè)備。就相當(dāng)于你用谷歌搜索直接點(diǎn)擊“手氣不錯(cuò)

代碼如下:

點(diǎn)擊按鈕,展示Presentation

可以看到在Presentation的構(gòu)造中,傳入了一個(gè)display,這就是搜索到的那個(gè)設(shè)備

先來測(cè)試一下,Android 4.2的手機(jī)在開發(fā)中選項(xiàng)中,都有模擬輔助屏幕的功能,我們選擇一個(gè)分辨率,打開它,模擬一個(gè)外部的屏幕。

打開模擬輔助屏幕

默認(rèn)輔助屏幕是同步手機(jī)屏幕的,打開之后,進(jìn)入測(cè)試app,點(diǎn)擊按鈕:

這里寫圖片描述

注意這可不是一個(gè)Dialog,而是我們把內(nèi)容展示在了一個(gè)模擬的輔助屏幕上,回頭看看標(biāo)題,是不是就實(shí)現(xiàn)了呢?

DisplayManager

第二種搜索設(shè)備的方法是DisplayManager,他可以搜索周圍所有可用的display,產(chǎn)生一個(gè)display數(shù)組,然后你就可以選擇合適的設(shè)備進(jìn)行展示了。

代碼如下:

DisplayManager

代碼還是挺簡(jiǎn)單的,搜索到周圍所有可用設(shè)備之后,展示到ListView上,點(diǎn)擊條目,在APP上和Presentataion上分別跑一個(gè)秒表,看看延時(shí)性如何,截圖如下。

DisplayManager

可以看到,搜索到的設(shè)備名稱是 疊加視圖#1 ,點(diǎn)擊條目之后兩個(gè)秒表也分別跑了起來。

總結(jié):

上面對(duì)Presentation進(jìn)行了一個(gè)簡(jiǎn)略的介紹,因?yàn)橄嘈糯蠹胰绻龅牟皇侵悄苡布较?,基本上不?huì)遇到這個(gè)需求。關(guān)于Activity對(duì)Presentation的管理方式,官方文檔的有兩個(gè)Demo可以參考,需要時(shí)可以去查看。

寫在后面:

周末在連接智能電視測(cè)試時(shí),發(fā)現(xiàn)延時(shí)很小,完全可以投入使用。
關(guān)于Presentation資料比較少,歡迎大家一同交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容