007 Android之Broadcast Receiver
生活随笔
收集整理的這篇文章主要介紹了
007 Android之Broadcast Receiver
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 廣播的概念
- 廣播的類型
- 廣播接收實例
- IP撥號器
- 開機自啟動
- 監聽應用安裝和卸載
廣播的概念
- 現實中的廣播:電視臺發送廣播,使用收聽機可以收聽廣播,得到廣播信息
- Android中的廣播:系統會產生很多事件,比如 電量不足 收發短信 撥打電話
- Android中的收音機:Broadcast Receiver 廣播接收器
- 廣播接收器類似Windows下的消息鉤子
廣播的類型
- 無序廣播:與Intent匹配的廣播接收者都可以收到該廣播,并且是沒有先后順序之分(同時收到)
- 廣播接收者無法使用setResult系列 getResult系列以及abort系列api,使用sendBroadCast發送廣播
- 有序廣播:與Intent匹配的廣播接收者都可以收到該廣播,但是會按照廣播接收者的優先級來決定接收的先后順序
- 可以使用setResult系列函數來結果傳給下一個接收者
- 通過getResult系列函數來取得上一個接收者
- 優先級的定義:-1000-1000
- 最終接收者:所有廣播接收者都收到廣播之后,它才接收,并且一定會接收
- 攔截有序廣播:abortBroadCast
廣播接收實例
IP撥號器
原理:當撥號后,撥打電話時會產生一個廣播,我們可以設定一個廣播接收器,接收指定廣播進行處理,在撥號時加上對應的IP前綴
步驟
新建一個廣播接收者
命名為CallReceiver,并且重寫onReceive方法
public void onReceive(Context context, Intent intent) {// TODO: This method is called when the BroadcastReceiver is receiving// an Intent broadcast.//throw new UnsupportedOperationException("Not yet implemented");String phoneNum=getResultData();setResultData("123456"+phoneNum);}在清單文件中注冊廣播,并且指定名稱過濾器和category
<receiverandroid:name=".CallReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.NEW_OUTGOING_CALL"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></receiver>然后在清單文件中新增intent-filter,并指定打電話的action
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>然后新增打電話權限。實際效果,當電話號撥出時,會自動新增123456的號碼前綴
開機自啟動
原理:自定義廣播接收器,注冊開機啟動廣播,開啟后啟動Activity
新建一個廣播接收器,命名為BootReceiver
@Overridepublic void onReceive(Context context, Intent intent) {// TODO: This method is called when the BroadcastReceiver is receiving// an Intent broadcast.Intent intent1=new Intent();intent1.setClass(context,MainActivity.class);intent1.setFlags(intent1.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent1);}重寫onReceive方法,設置標志位,在啟動時新建一個任務棧,并啟動Activity
<receiverandroid:name=".BootReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></receiver>并在清單文件中設置Action為開啟啟動
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />然后添加開啟啟動權限
啟動app,啟動完成之后,對應的廣播已經生效。此時重啟模擬器,app會自動啟動。
監聽應用安裝和卸載
原理:自定義廣播接收器,注冊監聽應用安裝卸載和更新的動作
新建一個廣播接收器,命名為AppReceiver
@Overridepublic void onReceive(Context context, Intent intent) {// TODO: This method is called when the BroadcastReceiver is receiving// an Intent broadcast.//獲取廣播中包含的應用包名Uri uri=intent.getData();//獲取接收的廣播動作String action=intent.getAction();//過濾動作if (action.equals("android.intent.action.PACKAGE_ADDED")){Log.d("GuiShou",uri+"被安裝");}else if (action.equals("android.intent.action.PACKAGE_REPLACED")){Log.d("GuiShou",uri+"被替換");}else if (action.equals("android.intent.action.PACKAGE_REMOVED")){Log.d("GuiShou",uri+"被卸載");}}重寫onReceive函數
<receiverandroid:name=".AppReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><action android:name="android.intent.action.PACKAGE_REPLACED" /><data android:scheme="package"/><category android:name="android.intent.category.DEFAULT" /></intent-filter></receiver>在清單文件中添加安裝包相關的動作
此時我們去卸載和安裝應用程序,都可以被程序監控到,并且打印相關日志
總結
以上是生活随笔為你收集整理的007 Android之Broadcast Receiver的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 006 Android之Activity
- 下一篇: 008 Android之Service