Android BroadcastReceiver接收收到短信的廣播
一、知識介紹
1、broadcastReceiver是廣播接受者,四大組件之一。
2、Android中內(nèi)置了很多系統(tǒng)級別的廣播,可以在應(yīng)用程序中得到各種系統(tǒng)的狀態(tài)信息。
3、使用場景:
①當(dāng)手機(jī)沒有電時,會告知用戶“電量低”的廣播信息??梢宰龅秸谑褂玫腶pp就會接收到這個廣播消息,如果是游戲可能是提醒保存數(shù)據(jù),如果是正在使用的工作軟件,可能提醒接上電源。
【提示】對于某某程序來說,可以選擇接收這一消息也可以選擇不接收這個消息。
②手機(jī)的storage不夠了,提示你清理空間,否則應(yīng)用程序?qū)⒆兟蛘邿o法使用。
③手機(jī)一開機(jī),某某程序就自動運(yùn)行,QQ、微信都是開機(jī)自啟。
4、一個程序發(fā)出廣播信息,一個程序接收廣播信息,所以至少需要2個程序才能完成一發(fā)一收。發(fā)的一方,叫廣播發(fā)送方;收的一方,叫廣播接收者。
5、廣播接受者需要進(jìn)行注冊。動態(tài)注冊,靜態(tài)注冊(在AndroidManiFest文件中)
二、項(xiàng)目實(shí)踐
【步驟】
?、俣x廣播接受者
②進(jìn)行注冊,添加過濾器 intent-filter,接收特定的廣播
③重寫onReceiver方法,如果執(zhí)行,代表已經(jīng)接收到廣播
?、芏x收到信息廣播接收者,屬于系統(tǒng)廣播,則需要申請權(quán)限(靜態(tài),動態(tài))
【項(xiàng)目結(jié)構(gòu)】
【提示】創(chuàng)建Receiver可以通過以下方式
此方法會自動在AndroidManifest中進(jìn)行注冊receiver,但是需要接收固定的廣播,仍需添加intent-filter
【AndroidManifest】
<receiver android:name=".receiver.MsgReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> <!--接收收到信息的廣播--> </intent-filter> </receiver>
【MsgReceiver】
重寫onReceiver方法,添加Toast
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MsgReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Toast.makeText(context, "收到信息", Toast.LENGTH_SHORT).show(); //添加Toast便于觀察 } }
【添加權(quán)限】
①靜態(tài)權(quán)限:【AndroidManifest】
<uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
②動態(tài)權(quán)限【MainActivity】
import android.Manifest; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS)!= PackageManager.PERMISSION_GRANTED|| ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECEIVE_SMS) !=PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS}, 1); }//動態(tài)申請權(quán)限 } }
【測試】
①操作
②效果
【小結(jié)】
①這里是接收系統(tǒng)廣播,也可以自己定義廣播。以及可以添加很多功能,接收到廣播進(jìn)行特定的操作。
?、趶V播必須添加過濾器,對特定的廣播進(jìn)行接收
?、廴绻墙邮障到y(tǒng)廣播要進(jìn)行權(quán)限的申請,5.0之后一定要進(jìn)行動態(tài)權(quán)限申請才可以
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在android開發(fā)中進(jìn)行數(shù)據(jù)存儲與訪問的多種方式介紹
很多時候我們的軟件需要對處理后的數(shù)據(jù)進(jìn)行存儲或再次訪問,Android為數(shù)據(jù)存儲提供了多種方式,首先給大家介紹使用文件如何對數(shù)據(jù)進(jìn)行存儲,感興趣的朋友可以了解下哈2013-06-06Android 自定義Button控件實(shí)現(xiàn)按鈕點(diǎn)擊變色
這篇文章給大家介紹了android 自定義Button控件實(shí)現(xiàn)按鈕點(diǎn)擊變色的代碼,本文給大家附有注釋,非常不錯,代碼簡單易懂,對android按鈕點(diǎn)擊變色的實(shí)現(xiàn)感興趣的朋友參考下吧2016-11-11Android RecyclerView自由拖動item的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android RecyclerView自由拖動item的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01Android 中 android.view.WindowLeaked的解決辦法
這篇文章主要介紹了Android 中 android.view.WindowLeaked的解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05Android實(shí)現(xiàn)BannerLayout圖文輪播功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)BannerLayout圖文輪播功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Android開發(fā)中R.java文件丟失或無法更新的解決方法
這篇文章主要介紹了Android開發(fā)中R.java文件丟失或無法更新的解決方法,較為詳細(xì)的列舉分析了出現(xiàn)R.java文件丟失或無法更新的常見原因及相應(yīng)的解決方法,需要的朋友可以參考下2016-02-02