廢話不多說寂玲,最近兩天体捏,學(xué)習研究了一下鎖屏相關(guān)冠摄,以及浮窗相關(guān)糯崎,這里整理一下。
下面是一個自己寫的單詞鎖屏的軟件河泳。
先貼一下圖沃呢,有興趣的可以繼續(xù)往下看:
shot1.png
shot2.png
shot3.png
shot4.png
now 主要說說遇到的坑和學(xué)到的技術(shù)
- 1、6.0以上的手機使用system_alert_window權(quán)限拆挥,很特殊薄霜,需要跳轉(zhuǎn)到設(shè)置里面去設(shè)置。并且竿刁,對于其他Android廠商的不同rom黄锤,如miui等更需要特殊對待。6.0以下使用的話原生的系統(tǒng)直接配置使用即可食拜,但是還是其他廠商的rom需要適配鸵熟。
- 2、對于浮窗的話负甸,目前來說流强,個人搜羅了網(wǎng)上的一些方法只有,發(fā)現(xiàn)廖祜秋他們的window type 是toast的方法為最佳http://www.reibang.com/p/167fd5f47d5c 呻待, 不需要權(quán)限即可使用打月。但是,如果對于鎖屏來說蚕捉,它有一個小問題奏篙,就是它沒有辦法禁止狀態(tài)欄下拉、返回迫淹、home等鍵的使用秘通。它只是在window上面蒙了一層而已,不太適合做鎖屏敛熬。但是肺稀,如果做類似小球浮窗,來電浮窗的話应民,是個很好的選擇
- 3话原、真正比較好的方式,是用window type為 TYPE_SYSTEM_ERROR的方式http://www.ay27.com/2015/01/24/2015-01-24-android-keyguard/ 诲锹,這種方式能夠很好的禁止狀態(tài)欄下拉(沉浸式)繁仁,home,返回鍵等操作辕狰,完美改备。
- 4、這兩種方式都可以交互
- 5蔓倍、鎖屏是記單詞的鎖屏悬钳,用到了數(shù)據(jù)庫盐捷,目前沒有找到好的開源API,所以只有去網(wǎng)上找db或者sql自己生成默勾。加載的時候需要新開線程操作碉渡,加載好了之后才使用。
- 6母剥、我的加載單詞的策略:一天加載20個滞诺,在詞庫中隨機選20個,然后一天之內(nèi)所有出現(xiàn)的單詞都在這20個當中环疼。加載數(shù)據(jù)庫的時候习霹,只有每天的第一次加載才會加載,不必每次都加載炫隶。
- 7淋叶、數(shù)據(jù)庫:realm ,比較坑伪阶,它很強大煞檩,但是有個小地方,不支持list<String > String[]栅贴。
- 8斟湃、軟鍵盤里面的完成按鈕,
setImeOptions(EditorInfo.IME_ACTION_DONE);
需要在代碼里設(shè)置檐薯,有時候xml里設(shè)置不管用 - 9凝赛、用到了正則過濾中文、英文坛缕、符號等方法
- 10哄酝、這里用到了監(jiān)聽開屏的廣播,不是用的"android.intent.action.SCREEN_ON",因為它需要動態(tài)注冊在xml中注冊無效祷膳。而是用的是"android.intent.action.USER_PRESENT",這個是相當于屡立,用戶界面展示的監(jiān)聽直晨,也就是你從鎖屏進入home界面的監(jiān)聽,那時候膨俐,我們就可以跳轉(zhuǎn)我們的鎖屏界面了勇皇。
- 11、還有關(guān)于一天只執(zhí)行一次的算法策略問題焚刺。
- 12敛摘、有一點小問題就是,有時候熄屏只有過不了多久乳愉,進程會死兄淫,死了之后就監(jiān)聽不到系統(tǒng)廣播了屯远,這點我還在研究改進,希望大家快來交流