android 限制廣播訊息的接收者

2021-06-20 00:47:54 字數 2366 閱讀 8868

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

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

Android中的廣播

android中的廣播。有發射廣播,必須要有收音機才能接到,並且調對臺才能得到對應的臺。1.電台發射廣播 使用intent,intent intent new intent 需要廣播的臺的名字 context。sendbroadcast intent 也就是先 生成一下你需要廣播的臺,然後用send...

android中的廣播

接收廣播如下 public class mybroadcastreceiver extends broadcastreceiver 傳送廣播 intent intent new intent intent.setaction com.itcast.broadcastreceivertest inte...

android 廣播的方法

依賴包類 傳送廣播,實現例項如下 if nitscan 1 chnum 0 else break default broadcast cmd broadcast param break intent.putextra dvb channel search broadcast extr cmd,bro...