Android Things Developer Preview 8

Google發(fā)布了Android Things新的Developer Preview 8版本晰搀,按照官網(wǎng)的說(shuō)法缸托,DP8已經(jīng)是發(fā)布候選版(RC版)了拨黔,DP8的Android Things支持庫(kù)代表了即將發(fā)布的1.0 stable release的最終版的API接口始苇。在DP8之后,API將不會(huì)再有更多突破性的更改筷转。所以如果你已經(jīng)入手Android Things姑原,DP8是你必須要升級(jí)和關(guān)注的版本;如果你剛剛接觸Android Things或是還沒(méi)入手Android Things呜舒,那么從DP8開(kāi)始也是最好的選擇锭汛。

Android Things Developer Preview 8

官網(wǎng)Release Note中提到,開(kāi)發(fā)Android Things DP8的APP袭蝗,需要Android Studio 3.2 Canary 11以上版本唤殴,Android Studio 3.2目前還沒(méi)有release,所以要從Preview通道下載到腥,https://developer.android.google.cn/studio/preview/朵逝,目前最新版是Android Studio 3.2 Canary 12其實(shí)Android Studio 3.0以上,就可以開(kāi)發(fā)Android Things的APP了乡范,也不是一定要升級(jí)Android Studio廉侧。(至于為什么官網(wǎng)要求用Android Studio 3.2,后文會(huì)提到篓足。)

DP8中你需要注意的

1. IOT_LAUNCHER intent filter 改為了 android.intent.category.HOME

在之前版本中段誊,開(kāi)啟自啟動(dòng)需要添加標(biāo)識(shí),IOT_LAUNCHER這個(gè)為Things定制出來(lái)的標(biāo)識(shí)栈拖,從DP8開(kāi)始就退出歷史舞臺(tái)了连舍,改成了和Android統(tǒng)一的android.intent.category.HOME。

android.intent.category.HOME

有android.intent.category.HOME標(biāo)識(shí)的Activity涩哟,在Things開(kāi)機(jī)后會(huì)自動(dòng)啟動(dòng)索赏,關(guān)閉后會(huì)自動(dòng)重啟。也就是說(shuō)贴彼,有HOME標(biāo)識(shí)的Activity潜腻,你將沒(méi)辦法退出它,除非用adb uninstall命令將它卸載器仗。所以建議你在開(kāi)發(fā)時(shí)不要加上HOME標(biāo)識(shí)融涣,等程序調(diào)試OK正式發(fā)布了再加上童番。?


2. USE_PERIPHERAL_IO權(quán)限

在之前的版本中,控制PIO是不需要申明權(quán)限的威鹿,但從DP8開(kāi)始剃斧,需要在AndroidManifest.xml中申明USE_PERIPHERAL_IO權(quán)限。即增加:

<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />


3. 授予危險(xiǎn)權(quán)限(動(dòng)態(tài)權(quán)限)

從Android 6.0開(kāi)始忽你,Android增加了動(dòng)態(tài)權(quán)限的概念幼东,即對(duì)于一些危險(xiǎn)的操作,會(huì)彈出對(duì)話框讓用戶確認(rèn)是否授權(quán)科雳,比如訪問(wèn)手機(jī)攝像頭根蟹。

Android Things是基于Android 8.1的,所以也是要申請(qǐng)動(dòng)態(tài)權(quán)限的糟秘,然而作為一個(gè)面向設(shè)備的系統(tǒng)娜亿,有時(shí)候連屏幕都沒(méi)有,是沒(méi)辦法讓用戶去操作授權(quán)的蚌堵。所以在之前的Android Things版本中,重啟系統(tǒng)時(shí)沛婴,自動(dòng)賦予了動(dòng)態(tài)權(quán)限吼畏,這也就是之前文章中提到過(guò)的,使用攝像頭之類的例子嘁灯,需要先啟動(dòng)APP泻蚊,然后再重啟開(kāi)發(fā)板,才能獲取到權(quán)限丑婿。

這種方式確實(shí)是個(gè)不靠譜的臨時(shí)解決方案性雄。在Android Things DP8中,對(duì)動(dòng)態(tài)權(quán)限的申請(qǐng)羹奉,被放在了Android Things的開(kāi)發(fā)控制臺(tái)中秒旋,也就是從Google服務(wù)器創(chuàng)建和上傳新的APP版本時(shí),你需要設(shè)置授予的危險(xiǎn)權(quán)限诀拭,具體可參見(jiàn):https://developer.android.google.cn/things/console/build

設(shè)置授予的危險(xiǎn)權(quán)限

前面說(shuō)的是指發(fā)布階段迁筛,那么在開(kāi)發(fā)階段,如何設(shè)置授予危險(xiǎn)權(quán)限呢耕挨?

我們需要在使用adb install時(shí)细卧,增加-g參數(shù),授予APP所有的運(yùn)行時(shí)(動(dòng)態(tài))權(quán)限筒占。

具體我們開(kāi)發(fā)調(diào)試APP需要怎么做呢贪庙?

首先,在Android Studio中Build APK

然后翰苫,進(jìn)入生成的apk的所在文件夾止邮,在命令行中執(zhí)行?adb install -g app-debug.apk

之后,再在Android Studio中點(diǎn)擊Run按鈕,APP就可以獲取到動(dòng)態(tài)權(quán)限了农尖。

如果你先在Android Studio中點(diǎn)擊了Run析恋,報(bào)了沒(méi)有權(quán)限的錯(cuò)誤,那么你需要用adb uninstall命令盛卡,先將APP卸載干凈助隧,再重做前面的步驟。

以《Android Things創(chuàng)客DIY第四課-Android Things入門配件包開(kāi)發(fā)案例教程-氣象站》中的例子為例:

1. 如果已經(jīng)運(yùn)行過(guò)滑沧,提示沒(méi)有權(quán)限并村,那么執(zhí)行:adb uninstall com.sysolve.androidthings.weatherstation

2. 然后在Android Studio中Build APK,再執(zhí)行adb install -g app-debug.apk

3. 提示Success之后滓技,再在Android Studio中點(diǎn)擊Run運(yùn)行哩牍。

你可能會(huì)覺(jué)得,運(yùn)行APP需要增加這么多步驟令漂,非常麻煩膝昆,這就是本文開(kāi)頭說(shuō)到的,官方推薦安裝Android Studio 3.2 Canary 11以上版本的原因了叠必,安裝了此版本的Android Studio荚孵,就不用自己通過(guò)adb install -g來(lái)安裝了,點(diǎn)擊運(yùn)行按鈕Android Studio就都幫你完成了纬朝。

新版Android Studio

如上圖所示收叶,新版的Android Studio運(yùn)行時(shí),已經(jīng)將-g參數(shù)帶上了共苛。所以用新版的Android Studio調(diào)試判没,就不用關(guān)心動(dòng)態(tài)權(quán)限申請(qǐng)的問(wèn)題了。


系統(tǒng)設(shè)置新增特性

DP8的系統(tǒng)設(shè)置界面隅茎,新增了一些新特性澄峰,可以幫助開(kāi)發(fā)者設(shè)置和測(cè)試開(kāi)發(fā)板

1. 新增了日期/時(shí)間設(shè)置界面可以設(shè)置日期、時(shí)區(qū)辟犀、時(shí)間摊阀,也可以設(shè)置從網(wǎng)絡(luò)自動(dòng)同步時(shí)間,不過(guò)在國(guó)內(nèi)好像是同步不了時(shí)間的踪蹬。

設(shè)置日期胞此、時(shí)區(qū)、時(shí)間

2. Camera測(cè)試如果連接了攝像頭跃捣,點(diǎn)擊Camera標(biāo)簽漱牵,即可查看攝像頭預(yù)覽,也可以看到攝像頭支持的分辨率和格式疚漆。

查看攝像頭預(yù)覽

3. Display屬性點(diǎn)擊Display標(biāo)簽酣胀,可以看到當(dāng)前的顯示分辨率刁赦。


DP8的API新增和改變

1. 藍(lán)牙BluetoothConfigManager

在BluetoothConfigManager中,增加了對(duì)藍(lán)牙I/O能力(Bluetooth I/O capabilities)的設(shè)置(聲明)闻镶。

如何理解呢甚脉?通常,Android Things作為一個(gè)智能設(shè)備铆农,是被用戶通過(guò)手機(jī)去配對(duì)的牺氨,所以Android Things的藍(lán)牙連接,是接收到配對(duì)請(qǐng)求->處理配對(duì)請(qǐng)求的過(guò)程墩剖。在用手機(jī)掃描藍(lán)牙設(shè)備進(jìn)行配對(duì)時(shí)猴凹,通常有幾種方式:

配對(duì)方和被配對(duì)方都顯示一個(gè)代碼,用戶看看是否一致岭皂,確定要不要配對(duì)郊霎;
被配對(duì)方顯示一個(gè)密碼,配對(duì)方需要輸入這個(gè)密碼進(jìn)行配對(duì)爷绘;
配對(duì)方顯示一個(gè)密碼书劝,然后在被配對(duì)方上輸入這個(gè)密碼進(jìn)行配對(duì)。

這樣作為藍(lán)牙設(shè)備被配對(duì)Android Things端土至,就需要向?qū)Ψ缴昝鞴憾裕约河袥](méi)有鍵盤能輸入、有沒(méi)有顯示屏能顯示毙籽,來(lái)確定采用什么方式進(jìn)行藍(lán)牙配對(duì),這個(gè)聲明就是藍(lán)牙I/O能力(Bluetooth I/O capabilities)毡庆。有以下幾個(gè)可選值:

IO_CAPABILITY_NONE: 設(shè)備既沒(méi)有顯示屏坑赡,也沒(méi)有鍵盤。(默認(rèn)值)
IO_CAPABILITY_OUT: 設(shè)備只有顯示屏么抗。
IO_CAPABILITY_IN: 設(shè)備只有鍵盤可接受用戶輸入毅否。
IO_CAPABILITY_IO: 設(shè)備有顯示屏,并能輸入YES/ON(可用于輸入同意配對(duì)或不同意)蝇刀。
IO_CAPABILITY_KBDISP: 設(shè)備有顯示屏螟加,也有鍵盤可接受用戶輸入。

具體如何建立藍(lán)牙連接吞琐,可參見(jiàn)Bluetooth guide:https://developer.android.google.cn/things/sdk/apis/bluetooth


2. 重構(gòu)了InputDriver

重構(gòu)了InputDriver捆探,以支持更靈活的輸入事件類型,具體可參見(jiàn)input driver guide:https://developer.android.google.cn/things/sdk/drivers/input


3. 擴(kuò)展了Location驅(qū)動(dòng)框架

擴(kuò)展了Location驅(qū)動(dòng)框架以支持眾多的GNSS接收器站粟。之前版本中黍图,是使用“GPS”這個(gè)名稱的,由于“GPS”特指美國(guó)的全球衛(wèi)星定位系統(tǒng)奴烙,所以新版中助被,命名改為了“GNSS”即全球?qū)Ш叫l(wèi)星系統(tǒng)(Global Navigation Satellite System)剖张,它是泛指所有的衛(wèi)星導(dǎo)航系統(tǒng),如中國(guó)北斗揩环、歐洲Galileo等搔弄。

Android Things本身并沒(méi)有內(nèi)置GNSS定位接收器,如果要在Android Things中使用定位服務(wù)丰滑,通常需要連接一個(gè)串口的“GNSS”接收器顾犹,目前市面上可以買到一些北斗或GPS的定位模塊,如果是串口通訊的吨枉,且串口電平為3.3V TTL蹦渣,則可以直接連接在Android Things開(kāi)發(fā)板上使用。

大致的原理是:

1. 在Android Things開(kāi)發(fā)板上貌亭,通過(guò)串口接收“GNSS”接收器發(fā)來(lái)的數(shù)據(jù)柬唯;

2. 將數(shù)據(jù)解析成Location對(duì)象(包含經(jīng)緯度、高度圃庭、速度锄奢、時(shí)間等信息);

3. 通過(guò)com.google.android.things.userdriver.location.GnssDriver對(duì)象的reportLocation方法剧腻,把Location報(bào)告給框架拘央;

4. 這時(shí)候,就可以通過(guò)Android標(biāo)準(zhǔn)的獲取位置信息的方法书在,獲取到定位信息了灰伟。

如何使用Android Things進(jìn)行定位,可以參見(jiàn):https://developer.android.google.cn/things/sdk/drivers/location


4. 調(diào)整了所有callback注冊(cè)相關(guān)方法的參數(shù)的順序

調(diào)整了所有callback注冊(cè)相關(guān)方法的參數(shù)的順序儒旬,簡(jiǎn)單說(shuō)就是把callback參數(shù)放到最后去了栏账,這樣可以更好的與Kotlin互操作。

比如這個(gè)注冊(cè)串口驅(qū)動(dòng)的方法:mLoopbackDevice.registerUartDeviceCallback(mInputHandler, mCallback)栈源,在之前版本中挡爵,參數(shù)順序是mCallback, mInputHandler。


5. 增加了WifiP2pManager API

增加了WifiP2pManager API甚垦,以支持對(duì)Wifi peer-to-peer的支持茶鹃,也就是對(duì)Wifi對(duì)等網(wǎng)絡(luò)的支持。

這是之前我和很多開(kāi)發(fā)者一直期望的一個(gè)功能艰亮。試想一下闭翩,做了一個(gè)智能設(shè)備,如果沒(méi)有屏幕迄埃,沒(méi)有鼠標(biāo)或觸摸屏男杈,如何讓設(shè)備連上家里的Wifi上網(wǎng)呢?藍(lán)牙调俘?太多此一舉了吧伶棒。有了Wifi對(duì)等網(wǎng)絡(luò)旺垒,就可以和手機(jī)建立對(duì)等網(wǎng)絡(luò)直接連接了,連上之后把家里的Wifi賬號(hào)密碼發(fā)送過(guò)去肤无,設(shè)備就可以切換到連接家里的Wifi路由器了先蒋。

可惜的是,這個(gè)功能目前僅僅支持NXP i.MX7D宛渐,樹(shù)莓派目前并不支持竞漾。


6. 刪除了ScreenManager API

之前的版本中的ScreenManager API已被刪除,設(shè)置屏幕亮度和方向窥翩,可以使用和Android一致的API业岁。

設(shè)置屏幕亮度使用window的screenBrightness屬性:

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL;
getWindow().setAttributes(lp);

屏幕方向通過(guò)activity的screenOrientation定義進(jìn)行控制:

<activity android:name="..." android:screenOrientation="portrait">
? ? ...
</activity>


具體變更內(nèi)容可參見(jiàn)Release Notes

Release Notes | Android Things?developer.android.google.cn

如果開(kāi)發(fā)板沒(méi)有升級(jí)到DP8,代碼通過(guò)com.google.android.things:androidthings:+引用到最新版DP8的API時(shí)寇蚊,可能會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤笔时,此時(shí)可以在build.gradle中指定版本com.google.android.things:androidthings:0.7-devpreview。推薦的方法是將開(kāi)發(fā)板升級(jí)到DP8版本仗岸。

可以從以下地址下載DP8系統(tǒng)固件:

NXP iMX7D 鏈接:https://pan.baidu.com/s/1ihd7-tTM7efRGj8veqhNig?密碼:bp75

樹(shù)莓派3B 鏈接:https://pan.baidu.com/s/1o_HvFmATEX-h6h_AvoeMeg?密碼:rk6h

如何刷系統(tǒng)允耿,可參見(jiàn):

Android Things在NXP Pico i.MX7D上安裝運(yùn)行

Android Things入門防坑必讀-樹(shù)莓派硬件和系統(tǒng)下載安裝篇

歡迎關(guān)注我的 知乎Android Things專欄 和 簡(jiǎn)書上的Android Things文集,一起交流探討新一代物聯(lián)網(wǎng)技術(shù)扒怖。

了解Android Things入門知識(shí)较锡,可以閱讀:《Android Things入門教程

了解Android Things所需硬件,可以閱讀:《Android Things硬件


李雷鳴

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盗痒,一起剝皮案震驚了整個(gè)濱河市蚂蕴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俯邓,老刑警劉巖骡楼,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異看成,居然都是意外死亡君编,警方通過(guò)查閱死者的電腦和手機(jī)跨嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門川慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人祠乃,你說(shuō)我怎么就攤上這事梦重。” “怎么了亮瓷?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵琴拧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嘱支,道長(zhǎng)蚓胸,這世上最難降的妖魔是什么挣饥? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮沛膳,結(jié)果婚禮上扔枫,老公的妹妹穿的比我還像新娘。我一直安慰自己锹安,他們只是感情好短荐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叹哭,像睡著了一般忍宋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上风罩,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天糠排,我揣著相機(jī)與錄音,去河邊找鬼泊交。 笑死乳讥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廓俭。 我是一名探鬼主播云石,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼研乒!你這毒婦竟也來(lái)了汹忠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雹熬,失蹤者是張志新(化名)和其女友劉穎宽菜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體竿报,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铅乡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烈菌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阵幸。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芽世,靈堂內(nèi)的尸體忽然破棺而出挚赊,到底是詐尸還是另有隱情,我是刑警寧澤济瓢,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布荠割,位于F島的核電站,受9級(jí)特大地震影響旺矾,放射性物質(zhì)發(fā)生泄漏蔑鹦。R本人自食惡果不足惜卜范,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一拳亿、第九天 我趴在偏房一處隱蔽的房頂上張望磨澡。 院中可真熱鬧指巡,春花似錦、人聲如沸火鼻。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魁索。三九已至融撞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粗蔚,已是汗流浹背尝偎。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏控,地道東北人致扯。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像当辐,于是被迫代替她去往敵國(guó)和親抖僵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容