java 创建日程到期提醒_苹果“快捷指令”日程播报完美版
日程播報(bào)是一個(gè)常見于“快捷指令”中“早安/晚安”場(chǎng)景中的一項(xiàng)功能。通過(guò)與Win10日歷時(shí)刻同步,可以非常方便的安排未來(lái)行程,避免遺忘重要事項(xiàng)。比如這樣
每天早上關(guān)掉鬧鐘后,SIRI將你今日的全部行程、生日提醒、節(jié)氣、課表等等挨個(gè)念出來(lái),絕對(duì)是一件心曠神怡的事情。
然而,目前網(wǎng)上能找到的教程,以及“捷徑盒”中所能下載到的版本都存在一個(gè)嚴(yán)重的問(wèn)題,既SIRI不會(huì)斷句,她會(huì)一口氣把當(dāng)天日歷上的所有文字全部逐個(gè)念出來(lái),導(dǎo)致體驗(yàn)感大打折扣。
通過(guò)瞎貓碰死耗子的鉆研精神,在這里分享完美版日程播報(bào)核心,并提供一套自用的設(shè)置。該版本可以實(shí)現(xiàn)的功能有:
運(yùn)行演示如下
知乎視頻?www.zhihu.com這是一個(gè)簡(jiǎn)單的目錄
對(duì)于只關(guān)心使用該功能的朋友請(qǐng)直接看第一部分
對(duì)于進(jìn)階玩家可以在第二部分交流
對(duì)于想了解,為了實(shí)現(xiàn)完美版前期經(jīng)歷過(guò)什么失敗版本的朋友可以繼續(xù)看第三部分,作為拋磚引玉。
需要事先說(shuō)明的是 我的系統(tǒng)版本為IOS14.2
對(duì)于更低系統(tǒng)版本不一定保證兼容性,當(dāng)然很遺憾也沒(méi)有條件去驗(yàn)證了。
首先點(diǎn)右上角?添加一個(gè)新的快捷指令
點(diǎn)擊添加操作,來(lái)加入整個(gè)程序的第一條指令。完整程序大致可分為三節(jié),首先來(lái)創(chuàng)建第一節(jié),既準(zhǔn)備工作
搜索重復(fù),點(diǎn)擊“重復(fù)”
將重復(fù)次數(shù)設(shè)定為10
添加文本
每次添加新指令會(huì)默認(rèn)添加到最底部,輕輕按住指令可以上下移動(dòng)位置,這里咱們給移動(dòng)到重復(fù)結(jié)束之間
輕點(diǎn)一下文本,這里輸入一個(gè)空格,非常重要!!!!!這里輸入了一個(gè)空格,如果忘記輸入,最后會(huì)失敗!!!!
程序第一節(jié)結(jié)束,第一節(jié)用于將來(lái)給列表補(bǔ)充循環(huán)次數(shù),同時(shí)不影響正確的播報(bào)。會(huì)在文章第二部分詳細(xì)解釋
下面開始第二節(jié)設(shè)置
添加獲取臨近日程
在折疊里面選擇今天,同時(shí)自定義獲取日程數(shù)量,這個(gè)取決于各位自己的最大日程數(shù)量,以及自己想聽到的數(shù)量,建議將第一節(jié)重復(fù)次數(shù)與這里設(shè)置一致。
添加計(jì)數(shù),這里使用它默認(rèn)添加結(jié)果即可
添加從輸入中獲取文本
這里進(jìn)行一個(gè)比較重要的操作,變量修改,在之后的操作中會(huì)經(jīng)常使用,可以看到文稿指令中有一個(gè)“數(shù)量”選項(xiàng),并且可以編輯,這條指令的作用就是某項(xiàng)內(nèi)容轉(zhuǎn)化為字符串并存儲(chǔ),這里說(shuō)他是字符串并不準(zhǔn)確,但是可以簡(jiǎn)單這么理解。
點(diǎn)擊數(shù)量,再點(diǎn)擊清除,咱們需要把日程內(nèi)容轉(zhuǎn)化為文本用于后續(xù)語(yǔ)音播報(bào)與判斷條件
清除后的樣子,點(diǎn)擊輸入會(huì)出現(xiàn)下圖
點(diǎn)擊選擇魔法變量,記住前面這個(gè)圖標(biāo)的樣子,在后續(xù)設(shè)置操作中,點(diǎn)擊這個(gè)圖標(biāo),即添加魔法變量。
點(diǎn)擊魔法變量后之前添加過(guò)的指令會(huì)變灰,并且下面會(huì)引出一個(gè)小尾巴,這個(gè)小尾巴就是前面指令的執(zhí)行結(jié)果,這里咱們選臨近日程,這時(shí)會(huì)將當(dāng)天全部日程通過(guò)換行創(chuàng)建為一個(gè)文本
至此第二節(jié)結(jié)束。下面第三節(jié)是程序主體,都包在同一個(gè)“如果”指令中,即if else 語(yǔ)句。最外面一層用來(lái)判斷當(dāng)天是否有日程。添加“如果”指令
清除 如果中的 文本條件
添加魔法變量,選擇數(shù)量
需要判斷日程數(shù)量是否為0,所以點(diǎn)擊條件,選擇“是”
緊接著輸入數(shù)字0,完成判斷條件的設(shè)置
添加文本指令
將添加文本框拖到否則上面,并輸入如上信息。
添加朗讀文本文件指令
將添加的朗讀指令拖到文本下面,會(huì)自動(dòng)鏈接到“沒(méi)有特殊日程安排”并朗讀這段話
添加一個(gè)新文本,放到否則下面
這里添加魔法變量,沒(méi)錯(cuò),需要調(diào)用前面某些執(zhí)行結(jié)果并轉(zhuǎn)為同一個(gè)文本。
依次添加臨近日程,以及重復(fù)結(jié)果。注意!!!!添加的順序!!!!以及要有換行!!!!不然會(huì)出錯(cuò)
添加拆分文本,需要將前面的一個(gè)文本拆成X+10個(gè)文本,X是當(dāng)天日程數(shù)量,10是第一節(jié)添加的空格循環(huán)次數(shù)
將添加的指令拖到結(jié)束條件之前,會(huì)自動(dòng)關(guān)聯(lián)
添加為每個(gè)項(xiàng)目重復(fù)指令
拖上去,自動(dòng)將上述拆分的X+10個(gè)文本創(chuàng)建為一個(gè)X+10維列表
添加新文本,放在結(jié)束重復(fù)之后
輸入如上內(nèi)容
添加朗讀文本,并拖到文本之后
添加重復(fù)指令
拖到朗讀文本之后,重復(fù)次數(shù)設(shè)定與所獲取的日程數(shù)量一致,這里將進(jìn)行循環(huán)播報(bào),逐條念出日程安排
添加從列表中獲取項(xiàng)目,即提取列表中的元素
拖到重復(fù)下面,清除默認(rèn)的文本
單擊,灰色的列表,并選擇魔法變量
選擇重復(fù)結(jié)果
下面選擇提取列表中的哪個(gè)元素,選擇索引處的項(xiàng)目
下面需要輸入索引標(biāo)號(hào),咱們希望逐條播報(bào),因此這里的索引編號(hào)是個(gè)變量,每次循環(huán)后+1
左滑選擇重復(fù)索引
到這里,每次循環(huán)就可以獲得列表中的每一項(xiàng)了,我們希望播報(bào)日程,對(duì)于空格內(nèi)容直接跳過(guò),所以這里添加一個(gè)判斷條件
添加如果指令
拖到上面
判斷條件為“是”
第三個(gè)輸入框輸入一個(gè)空格,一定要有空格!!!!,于第一節(jié)文本中輸入內(nèi)容一致,如果外層循環(huán)內(nèi)容為空格,則直接跳過(guò),如果不為空格,則進(jìn)行播報(bào)
添加一個(gè)文本,放到否則下面
文本中添加 重復(fù)索引,敲一個(gè)冒號(hào),點(diǎn)擊魔法變量
選擇來(lái)自列表的項(xiàng)目
需要播報(bào)的內(nèi)容創(chuàng)建完畢
添加朗讀,語(yǔ)音播報(bào)上述文本。
至此,全部添加完畢,點(diǎn)擊下一步,保存快捷指令
點(diǎn)擊完成,創(chuàng)建全部完成,整個(gè)流程可見下圖
下面添加自動(dòng)化流程,即早上關(guān)掉鬧鐘后自動(dòng)語(yǔ)音播報(bào)
點(diǎn)擊自動(dòng)化,并點(diǎn)擊右上角?,這里已經(jīng)存在的是我自己使用的自動(dòng)化流程。
創(chuàng)建個(gè)人自動(dòng)化
選擇鬧鐘
如上設(shè)置
選擇快捷指令
選擇運(yùn)行快捷指令
選擇剛剛添加的快捷指令
選擇運(yùn)行前不詢問(wèn)
至此,第一部分全部結(jié)束。下面進(jìn)入交流環(huán)節(jié)
2. 第二部分
上來(lái)先把核心設(shè)置放出來(lái)
這里可以看到,循環(huán)播報(bào)過(guò)程中遇到的最大問(wèn)題是,循環(huán)次數(shù)只能設(shè)定為固定值,但每天播報(bào)的項(xiàng)目數(shù)為變量,這就意味著循環(huán)次數(shù)與列表維數(shù)不匹配,當(dāng)循環(huán)到超過(guò)列表維數(shù)后就會(huì)報(bào)錯(cuò)(可以運(yùn)行,只在最后報(bào)錯(cuò)中斷)。
經(jīng)過(guò)幾個(gè)版本的試驗(yàn),最終解決方案是用偽空元素?cái)U(kuò)充列表維數(shù),使之大于循環(huán)次數(shù)。
那么上面的指令就很好理解了
運(yùn)行測(cè)試,發(fā)現(xiàn)確實(shí)生成了6個(gè)新文本,目標(biāo)達(dá)成?
至此完成最核心的設(shè)置部分,剩下的事就是把這些文本輸入到同一個(gè)列表,建立6個(gè)新元素,然后再循環(huán)播報(bào)即可。為了參與觀看,將核心設(shè)置與最終版本利用方框標(biāo)注,便于觀看。
核心部分
在完整流程中對(duì)應(yīng)的位置。
3. 第三部分
其實(shí)對(duì)于這個(gè)問(wèn)題的解決思路無(wú)非兩種。
3.1第一種為順序模式,中間沒(méi)有任何循環(huán)結(jié)構(gòu),即目前能見到的所有殘血版語(yǔ)音播報(bào)。
解決方法就是想辦法在每一個(gè)日程中間讓SIRI有停頓。
目前可行方案是在每一項(xiàng)日程結(jié)尾添加逗號(hào),但對(duì)于生日、節(jié)氣這種系統(tǒng)自動(dòng)添加的內(nèi)容會(huì)失效。
只能期待將來(lái)在SIRI更聰明,知道什么時(shí)候該停頓。
3.2第二種方式為循環(huán)結(jié)構(gòu),一次循環(huán)只播報(bào)一項(xiàng),通過(guò)循環(huán)運(yùn)算引入停頓。好處是不需要對(duì)現(xiàn)有日程進(jìn)行任何修改。
當(dāng)前循環(huán)結(jié)構(gòu)有兩個(gè)嚴(yán)重問(wèn)題。其一是循環(huán)次數(shù)不能自定義,也就是for循環(huán)中的i只能是固定值,但每天日程項(xiàng)目數(shù)不是固定值,最理想情況是把i設(shè)定為日程項(xiàng)目數(shù),目前不支持這項(xiàng)功能。如果循環(huán)次數(shù)為10,項(xiàng)目數(shù)為3,那么在第四次循環(huán)時(shí)候會(huì)報(bào)錯(cuò),但是不影響聽到今天的所有日程,也算是一種解決方法。
其二是沒(méi)有break指令,雖然可以獲取當(dāng)前循環(huán)次數(shù),與項(xiàng)目數(shù)進(jìn)行比對(duì),超過(guò)設(shè)定值直接中斷程序,無(wú)奈沒(méi)找到該指令,目前只能通過(guò)報(bào)錯(cuò)強(qiáng)行中斷。
曾經(jīng)試圖在循環(huán)中補(bǔ)充新元素添加到列表中,從而滿足循環(huán)10次的維度,但是失敗了。沒(méi)搞通在已有的列表中添加新元素,倒是可以通過(guò)循環(huán)的方式創(chuàng)建一個(gè)新列表。這種方法有興趣的朋友可以研究下。
如果不能在每次循環(huán)中添加新元素,從而讓總元素?cái)?shù)剛好等于循環(huán)次數(shù),那么就只能在最一開始補(bǔ)充元素?cái)?shù),使之大于循環(huán)次數(shù)了,也就是第二部分介紹的解決方案。
也許有人要問(wèn),問(wèn)什么不能讓補(bǔ)充后的列表元素?cái)?shù)剛好等于循環(huán)次數(shù)呢?答案是補(bǔ)充文本的生成也要靠一個(gè)循環(huán)語(yǔ)句,但是這里的循環(huán)變量是最開始設(shè)定好的固定值。
綜上所述,筆者經(jīng)歷的方案如下
?一口氣全念完
?添加句號(hào)引入停頓
?循環(huán)次數(shù)大于項(xiàng)目數(shù),通過(guò)報(bào)錯(cuò)中斷
?找到break指令中斷
?在每次循環(huán)中添加新元素?cái)U(kuò)充列表
?最開始擴(kuò)充列表元素
目前提供教程的方案可能存在以下問(wèn)題
由于需要進(jìn)行循環(huán)、判斷計(jì)算,因此播報(bào)等待時(shí)間可能不夠理想。
從完美主義出發(fā),列表元素?cái)?shù)最好等于循環(huán)次數(shù),但是還不知道該如何解決。
最后要感謝 @和浦 ,在這位大佬文章的介紹下,打開了快捷指令的大門,現(xiàn)在已經(jīng)成為每天必備的實(shí)用app了。
https://zhuanlan.zhihu.com/p/93421926
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java 创建日程到期提醒_苹果“快捷指令”日程播报完美版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字段定义_两大高招逐浪CMS中定义省地市
- 下一篇: 技校毕业是什么学历_技校毕业是什么学历