使用動(dòng)態(tài)broadcast receiver存在一個(gè)問題慨菱,即系統(tǒng)中的任何應(yīng)用均可以監(jiān)聽并觸發(fā)你的receiver残揉,通常來講昏苏,這不是我們想要的弦叶。
保護(hù)自己發(fā)送的廣播不被其他應(yīng)用接收
有兩種方式可以阻止未授權(quán)應(yīng)用闖入你的私人領(lǐng)域俊犯。
- 在manifest配置文件里給receiver標(biāo)簽添加一個(gè)
android: exported = "false"
屬性,聲明它僅限應(yīng)用內(nèi)部使用伤哺。這樣燕侠,系統(tǒng)中的其他應(yīng)用就再也無(wú)法接觸到該receiver了。
2)可以創(chuàng)建自己的使用權(quán)限立莉。這需要在manifest中添加自定義一個(gè)permission標(biāo)簽绢彤,然后使用uses-permission獲取自己的使用權(quán)限。
上圖圈起來的就是自定義permission并使用這個(gè)權(quán)限蜓耻。
我們?cè)趹?yīng)用發(fā)廣播時(shí)茫舶,使用這個(gè)權(quán)限就行了:
有了這個(gè)權(quán)限,所有應(yīng)用都必須使用同樣的權(quán)限才能接受你發(fā)送的intent刹淌。
保護(hù)自己的broadcast receiver
同樣在registerReceiver(.....)方法中傳入自定義權(quán)限就能解決問題饶氏,如下圖:
現(xiàn)在只有sendbroadcast帶有自己聲明的權(quán)限,下面這種方式[帶有"com.photogallery.PRIVATE"]
帶有自己聲明的權(quán)限有勾,才能夠觸發(fā)你的上面注冊(cè)的receiver疹启。