定向廣播的幾種方式

2021-07-03 20:57:56 字數 2317 閱讀 4465

在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");

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

tornado重定向的幾種方式

tornado第一種重定向方式,使用redirect方法 import tornado.web import tornado.ioloop class redirecthandlertest tornado.web.requesthandler def get self,args,kwargs 第一...

Android定向廣播

有時候我們在使用廣播的時候不希望自己傳送的廣播被其他應用程式接收到,那怎麼辦呢?我們只能定向的傳送廣播。本篇博文介紹一下定向廣播的使用。在進入正題之前先來介紹一下android ssp這個屬性。這個是google在api level 19加入的乙個xml 屬性,用於intent過濾的標籤中。ssp是...

22 廣播的幾種建立和傳送方式

public class mybroadcastreceiver01 extends broadcastreceiver android name 繼承broadcastreceiver 的類的包名.類名 android priority 許可權值大小 android name 你的意圖 inten...