編輯:關於Android編程
在Android系統中,BroadcastReceiver的設計初衷就是從全局考慮的,可以方便應用程序和系統、應用程序之間、應用程序內的通信,所以對單個應用程序而言BroadcastReceiver是存在安全性問題的,相應問題及解決如下:
1、當應用程序發送某個廣播時系統會將發送的Intent與系統中所有注冊的BroadcastReceiver的IntentFilter進行匹配,若匹配成功則執行相應的onReceive函數。可以通過類似sendBroadcast(Intent, String)的接口在發送廣播時指定接收者必須具備的permission。或通過Intent.setPackage設置廣播僅對某個程序有效。
2. 當應用程序注冊了某個廣播時,即便設置了IntentFilter還是會接收到來自其他應用程序的廣播進行匹配判斷。對於動態注冊的廣播可以通過類似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定發送者必須具備的permission,對於靜態注冊的廣播可以通過android:exported="false"屬性表示接收者對外部應用程序不可用,即不接受來自外部的廣播。
上面兩個問題其實都可以通過LocalBroadcastManager來解決:
Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具類,幫助大家在自己的進程內進行局部廣播發送與注冊,使用它比直接通過sendBroadcast(Intent)發送系統全局廣播有以下幾點好處。
1 因廣播數據在本應用范圍內傳播,你不用擔心隱私數據洩露的問題。
2 不用擔心別的應用偽造廣播,造成安全隱患。
3 相比在系統內發送全局廣播,它更高效。
其使用方法也和正常注冊廣播類似:
LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mReceiver;
IntentFilter filter = new IntentFilter();
filter.addAction("test");
<PRE class=java name="code"> mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("test")) {
//Do Something
}
}
}; </PRE> mLocalBroadcastManager.registerReceiver(mReceiver, filter);
<PRE></PRE>
<P></P>
<PRE></PRE>
當然,和正常廣播一樣,也要在對應的生命周期中反注冊掉:
<P></P>
<P></P>
<P></P>
<PRE class=java name="code"> @Override
protected void onDestroy() {
super.onDestroy();
mLocalBroadcastManager.unregisterReceiver(mReceiver);
} </PRE>
<P></P>
<PRE></PRE>
<PRE></PRE>
<PRE></PRE>
Android編譯系統分析(五)-system.img的生成過程
我們在完整編譯android系統的時候,最終會生成幾個重要的鏡像文件,其中有system.img,userdata.img,ramdisk.img等。這篇文章的目的是分析
Android界面設計(APP設計趨勢 左側隱藏菜單右邊顯示content)
相關文章android popwindow實現左側彈出菜單層http://www.jb51.net/article/33533.htm移動App設計的13大精髓http:
Android布局之FrameLayout幀布局
前言作為android六大布局中最為簡單的布局之一,該布局直接在屏幕上開辟出了一塊空白區域,當我們往裡面添加組件的時候,所有的組件都會放置於這塊區域的左上角;幀布局的大小
Android 平板中 自定義鍵盤(popuwindow) 居於屏幕左下方 仿微信的密碼輸入界面
之前博客中,介紹過使用谷歌提供的鍵盤的一些api,可以很好地自定義鍵盤,這個有一個局限性,只能占滿屏幕,無法做到只能占一部分的需求鍵盤,如下圖我平板中的鍵盤需求:(由於公