限制廣播的接收者

2021-08-13 08:46:50 字數 2364 閱讀 5332

在android系統中sendbroadcast和broadcastreceiver。只要broadcastreceiver指定的action和sendbroadcast action一致就可以就行訊息接收。但是我們有這樣的需求即我傳送的廣播不允許所有應用都可以接收廣播訊息,而是要經過傳送者允許的才可以。比如某乙個產品簇,每乙個產品傳送的廣播訊息只允許本簇內的產品才允許接收訊息。其它應用即使action一樣,也無法接收訊息。這樣就大大的提供了產品的安全性。那麼如何實現呢?本文主要目的就是於此。

一、只允許本應用內允許接收。

解決方案一:localbroadcastmanager (區域性廣播)

優點:1.因廣播資料在本應用範圍內傳播,你不用擔心隱私資料洩露的問題。

2. 不用擔心別的應用偽造廣播,造成安全隱患。

3. 相比在系統內傳送全域性廣播,它更高效。

缺點:1.      它只能夠在同乙個程序使用,如果本應用是多程序的。必須保證傳送者和接收者是在同乙個程序內。

2.      它只能夠動態註冊和取消。

使用例項:

先通過localbroadcastmanager lbm = localbroadcastmanager.getinstance(this);獲取例項

然後通過函式 registerreceiver來註冊***

registerreceiver(newbroadcastreceiver()  

}, newintentfilter(***x)); 

通過 sendbroadcast 函式來傳送廣播

lbm.sendbroadcast(newintent(***x));  

解決方案二:intent 指定包名intent.setpackage設定廣播僅對本程式有效【見二】

二、指定某乙個應用允許接收。

解決方案:intent 指定包名intent.setpackage設定廣播僅對相同包名的有效

優點:1.支援跨程序

2.receiver可以是靜態註冊也可以是動態註冊。

3.只有指定的包名的應用程式才能夠接收到資料,所以安全性較高。

缺點:1.如果一旦反編譯,很容易偽造廣播,造成安全隱患

2.在系統內發生全域性廣播,它效率較低

3.它只能夠滿足乙個應用的需求,不能夠同時指定多個

使用例項:

intent intent = new intent();             

intent.setpackage("應用包名");

intent.setaction("訊息action");            

sendbroadcast(intent);

三、指定某乙個receiver允許接收。

解決方案:intent 指定包名intent. setcomponent設定廣播僅對相同包名的有效

優點:1.可以指定到具體某乙個receiver,安全性更高

2.receiver可以是靜態註冊也可以是動態註冊。

缺點:1.它只能指定乙個receiver,侷限性較大

使用例項:

intent intent = new intent();             

intent. setcomponent(newcomponentname("包名", "receiver類名"));

intent.setaction("訊息action");            

sendbroadcast(intent);

四、指定多個應用有權接收。

解決方案:sendbroadcast(intent, string)的介面在傳送廣播時指定接收者必須具備的permission。如果擔心反編譯後,許可權被竊取,限制失效。可以在宣告許可權時,提高許可權的

leverl為簽名驗證,即只有相同簽名的應用且有該許可權才能夠接收,這樣就能夠滿足產品簇的問題。

使用例項:

androidmanifest.xml

android:label="***x" 

android:name=" com.test.permission" 

android:protectionlevel=" signature">

android:name="***x"

android:permission="com.test.permission" >

intent intent = new intent();             

intent.setaction("訊息action");            

sendbroadcast(intent, "com.test.permission");

注意:如果要求安全級別較高,使用簽名驗證機制即使優點又是缺點。目前還沒有找到更好的方法,能夠滿足多個指定應用都能夠接收訊息,且安全級別不會受到偽造或竊取的風險。

廣播接收者

廣播被分為倆種不同的型別,普通廣播和有序廣播,普通廣播是完全非同步的。可以在同一時刻被所有的接收者收到。訊息傳遞的效率比較高,但是缺點是 接收者不能將結果傳遞給下乙個接收者。並且無法終止廣播intent的傳播。然後有序廣播是按照接收者申明的優先級別 申明在intent filter元素的androi...

android 限制廣播訊息的接收者

在android系統中sendbroadcast和broadcastreceiver。只要broadcastreceiver指定的action和sendbroadcast action一致就可以就行訊息接收。但是我們有這樣的需求即我傳送的廣播不允許所有應用都可以接收廣播訊息,而是要經過傳送者允許的才...

廣播和廣播接收者

廣播和廣播接收者 1 廣播 就是一對多,就是傳送資訊 2 廣播接收者 就是接收廣播傳送的訊息並做處理 在android中,廣播接收者才是四大元件之一,廣播不是 廣播不會決定誰是接收者,只要是註冊了該廣播,那麼就能成為該廣播的接收者 接收系統傳送的廣播 比如,網路變化,開機狀態,手機的狀態 廣播接收者...