編輯:關於Android編程
為廣播設置權限要考慮兩方面的問題。
作為廣播的發送者,希望限制廣播的接收者,只讓特定的應用組件接收到發出的廣播; 作為廣播的接收者,不希望任何組件都能模仿它關心的廣播,因此希望在接受廣播的時候能檢查一下這條廣播的發送者是否具有發送這條廣播的資格;無論是上面哪種情況,解決方法都試一樣的:為發送者和接收者都設置一個相同的權限,只有它們的權限匹配上了,廣播機制才能產生效果。
假設組件A要發布廣播,
在AndroidManifest.xml
文件中,與同級的位置,對外聲明使用權限,表示這個應用發布了一個叫做com.anddle.receiver.receivebroadcast
的權限,
在組件向整個系統發布廣播的時候,就采用,
//前一個參數是廣播的名稱,後一個參數是廣播權限的名稱
sendBroadcast("custom.action.mybroadcast","com.anddle.receiver.receivebroadcast");
這裡的廣播權限com.anddle.receiver.receivebroadcast
,就是AndroidManifest.xml
中聲明的權限。
當接收者
要接收這種廣播的時候,
接受者
需要在它的AndroidManifest.xml
當中靜態的定義好接收機
對應的receiver
,或者在代碼當中動態的定義好接收機
對應的receiver
;
在它的AndroidManifest.xml
當中,聲明要使用的權限,
假設接收者1
要設置權限,只接收特定發送者
發來的廣播,
在AndroidManifest.xml
文件中,對要設置權限的Broadcast Receiver
設置上android:permission
屬性,該屬性值可以任意指定一個字符串。通常使用程序的包名作為其中的一部分,這樣可以避免和其他應用中的權限聲明沖突。例如com.anddle.receiver.sendbroadcast
,
在AndroidManifest.xml
文件中,與同級的位置,對外聲明前面使用的標簽,表示這個應用發布了一個叫做com.anddle.receiveraccess
的權限,
其中android:name
屬性的值,就是
標簽中設置的android:permission
的值。
發送者B要發送相應的廣播,就要
在B的AndroidManifest.xml
中加入權限的使用,
其中,
標簽中設置的android:name
的值,就是應用A中對外聲明的那個Broadcast Receiver
的權限值。
使用代碼發送廣播,
Intent i = new Intent("custom.action.mybroadcast");
sendBroadcast(i);
在應用的AndroidManifest.xml
文件中,Broadcast Receiver
具有android:exported
屬性,
android:exported
屬性設置成true
:可以接收其他應用發來的廣播; android:exported
屬性設置成false
:不能接收其他應用發來的廣播;
所以當兩個不同的應用之間需要發送和接收廣播的時候,需要把這個屬性設置成true
。
/*******************************************************************/
* 版權聲明
* 本教程只在CSDN和安豆網發布,其他網站出現本教程均屬侵權。
/*******************************************************************/
系統提供了很多現成的廣播,開發者可以根據自己應用的需要,關注某些特定的廣播。這裡介紹幾種使用頻率最高的廣播。
有的時候,應用希望在開機完成之後,啟動一個在後台運行的Service
。例如我們常用的微信應用,開機後會啟動一個Service
和網絡相連,如果有消息來,就通知我們有朋友發消息來了。
但是系統剛啟動,用戶沒有主動打開微信,那麼這個微信的Service
是不會運行起來的。這時候,就可以使用Broadcast Receiver
了,讓它關注一個叫做android.intent.action.BOOT_COMPLETED
的廣播,
這樣,等開機完成後,系統發出android.intent.action.BOOT_COMPLETED
廣播後,MyReceiver
就可以收到這條廣播,進行自己的處理-例如運行一個Service
了。
使用這條廣播有個很重要的地方需要注意,在Android 4.0以上的系統當中,安裝了這個應用以後,用戶必須手動啟動一次該應用(運行該應用的Activity),這樣重啟設備之後,就能收到android.intent.action.BOOT_COMPLETED
廣播了。
如果我們很關心時間的變化,例如要實現一個時鐘,每一秒的變化,時間設置改變,時區變化都將是關心的內容。
所以,可以創建動態的接收機
監聽3種廣播,
Intent.ACTION_TIME_TICK
; Intent.ACTION_TIME_CHANGED
Intent.ACTION_TIMEZONE_CHANGED
final IntentFilter filter = new IntentFilter();
//監聽每一秒的變化
filter.addAction(Intent.ACTION_TIME_TICK);
//監聽時間設置的改變
filter.addAction(Intent.ACTION_TIME_CHANGED);
//監聽時區的改變
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
registerReceiver(receiver, filter);
同時將接收機
定義成,
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
//每一秒發生變化
}
else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
//時間發生變化
}
else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
//時區發生變化
}
}
};
介紹Snackbars provide lightweight feedback about an operation. They show a brief messag
在Android開發中,我們經常會用到對商家或者商品的評價,運用星星進行打分。然而在Android系統中自帶的打分控件,RatingBar特別不好用,間距和大小無法改變。
1、效果圖如下:這效果用戶體驗還是很酷炫,今天我們就來講解如何實現這個效果。2、分析為了方便理解,作圖分析如圖所示,整個頁面分為四個部分: &nbs
今天是放完假後工作的第一天,為了證明我不是一段幽靈代碼,我給各位看客老爺們說句:祝大家節日過得愉快(過得不愉快那也是人之常情)。我們繼續來講一講ListView的開發,