Kotlin語言使用BroadcastReceiver示例介紹
一、動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)
動(dòng)態(tài)注冊(cè):在代碼中注冊(cè)
動(dòng)態(tài)注冊(cè)能監(jiān)聽到大部分的系統(tǒng)廣播和自定義的廣播(都為隱式廣播)
步驟
1.新建一個(gè)Broadcast Receiver的子類,重寫onReceiver方法,當(dāng)接收到廣播時(shí),會(huì)執(zhí)行onReceiver方法里面的內(nèi)容。
2.調(diào)用registerRecevier方法注冊(cè),將intentFilter和Broadcast Receiver的子類的實(shí)例代入,其中intentFilter調(diào)用addAction方法添加需要接受的廣播的值。
3.動(dòng)態(tài)注冊(cè)的Broadcast Receiver最后一定要取消注冊(cè)。
class MainActivity : AppCompatActivity() { lateinit var timechange:TimeChange override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val intentFilter= IntentFilter() intentFilter.addAction("android.intent.action.TIME_TICK") timechange=TimeChange() registerReceiver(timechange,intentFilter) } override fun onDestroy(){ super.onDestroy() unregisterReceiver(timechange) } inner class TimeChange:BroadcastReceiver(){ override fun onReceive(p0: Context?, p1: Intent?) { Toast.makeText(p0,"Time Change",Toast.LENGTH_SHORT).show() } } }
靜態(tài)注冊(cè):在AndroidManifest.xml中注冊(cè)
靜態(tài)注冊(cè)只能監(jiān)聽到少量特殊的系統(tǒng)廣播(顯式廣播)
步驟
右擊com.example.broadcasttest包->"New"->"other"->"Broadcast Recevier"。
會(huì)彈出窗口,選擇Exported(屬性表示是否允許這個(gè)BroadcastRecevier接收本程序以外的廣播)
選擇Enabled(屬性表示是否啟用這個(gè)BroadcastRecevier)輸入類名,會(huì)自動(dòng)創(chuàng)建BroadcastRecevier的子類和在AndroidManifest.xml里面注冊(cè),這時(shí),我們只要重寫onRecevier方法和在AndroidManifest.xml里注冊(cè)的recevier添加標(biāo)簽和action就行,最后記得思考是否需要進(jìn)行權(quán)限聲明。
class Boot : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Toast.makeText(context,"Boot",Toast.LENGTH_SHORT).show() } }
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> ..... <receiver android:name=".Boot" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver>
二、自定義廣播
標(biāo)準(zhǔn)廣播:全部一起接收廣播消息,不能被截?cái)?/p>
1.方法解析
packageName:是getpackageName的語法糖,用于獲取當(dāng)前程序的包名
setPackage():參數(shù)為packageName(程序的包名),傳入當(dāng)前程序的包名給intent,指定這條廣播發(fā)送給哪個(gè)應(yīng)用程序,把它從隱式廣播變成顯式廣播
sendBroadcast():將廣播發(fā)出去
2.發(fā)送標(biāo)準(zhǔn)廣播
步驟
1.新建一個(gè)BroadcastRecevier的子類(詳細(xì)方法在靜態(tài)注冊(cè)里)
class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Toast.makeText(context,"MyReceiver",Toast.LENGTH_SHORT).show() } }
2.AndroidManifest.xml里注冊(cè)的recevier添加標(biāo)簽和action
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.MyApplication.MY_BROADCAST"/> </intent-filter> </receiver>
3.在布局文件中加入button
<Button android:id="@+id/send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="send" />
4.在button的點(diǎn)擊事件中,構(gòu)建intent對(duì)象,并把要發(fā)送的廣播值傳入,把它變成顯式廣播,然后把它發(fā)送出去。
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val send:Button=findViewById(R.id.send) send.setOnClickListener { val intent=Intent("com.example.MyApplication.MY_BROADCAST") intent.setPackage(packageName) sendBroadcast(intent) } } }
有序廣播:廣播按照規(guī)定的次序,一個(gè)一個(gè)地接收廣播消息,可截?cái)唷?/p>
1.方法解析
sendOrderedBroadcast():發(fā)送廣播,由兩個(gè)參數(shù),第一個(gè)參數(shù)式intent,第二個(gè)參數(shù)是一個(gè)與權(quán)限相關(guān)地字符
abortBroadcast():將這條廣播截?cái)?,后面地BroadcastRecevier無法接收廣播消息
android:priority屬性給BroadcastRecevier設(shè)置優(yōu)先級(jí)
2.發(fā)送有序廣播
步驟
1.新建兩個(gè)BroadcastRecevier的子類
class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Toast.makeText(context,"MyReceiver",Toast.LENGTH_SHORT).show() abortBroadcast() } }
class MyReceiver2 : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Toast.makeText(context,"MyReceiver2", Toast.LENGTH_SHORT).show() } }
2.AndroidManifest.xml里注冊(cè)的recevier添加標(biāo)簽和action,并設(shè)置優(yōu)先級(jí)
<receiver android:name=".MyReceiver2" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.MyApplication.MY_BROADCAST" /> </intent-filter> </receiver> <receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="100"> <action android:name="com.example.MyApplication.MY_BROADCAST" /> </intent-filter> </receiver>
3.在布局文件中加入button
<Button android:id="@+id/send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="send" />
4.在button的點(diǎn)擊事件中,構(gòu)建intent對(duì)象,并把要發(fā)送的廣播值傳入,把它變成顯式廣播,然后把它發(fā)送出去。
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val send:Button=findViewById(R.id.send) send.setOnClickListener { val intent=Intent("com.example.MyApplication.MY_BROADCAST") intent.setPackage(packageName) sendOrderedBroadcast(intent,null) } } }
到此這篇關(guān)于Kotlin語言使用BroadcastReceiver示例介紹的文章就介紹到這了,更多相關(guān)Kotlin BroadcastReceiver內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
andriod開發(fā)之Activity的渲染機(jī)制
本文給大家分享的是在andriod開發(fā)中經(jīng)常需要用到的Activity的渲染機(jī)制的詳細(xì)說明,主要是通過實(shí)例給大家講解Activity是如何畫到屏幕上的,希望大家能夠喜歡2018-03-03android實(shí)現(xiàn)圖片橡皮擦和快速染色功能
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)圖片橡皮擦和快速染色功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Android Flutter實(shí)戰(zhàn)之為照片添加顏色濾鏡
這篇文章我們將利用TweenAnimationBuilder來實(shí)現(xiàn)一個(gè)圖片調(diào)色的過渡動(dòng)畫,從而實(shí)現(xiàn)為照片添加顏色濾鏡的效果,感興趣的可以了解一下2022-12-12android通過bitmap生成新圖片關(guān)鍵性代碼
android通過bitmap生成新圖片具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助2013-06-06Android實(shí)現(xiàn)紙飛機(jī)的簡單操作
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)紙飛機(jī)的簡單操作,類似于漂流瓶功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Flutter 使用Navigator進(jìn)行局部跳轉(zhuǎn)頁面的方法
這篇文章主要介紹了Flutter 使用Navigator進(jìn)行局部跳轉(zhuǎn)頁面的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Android編程開發(fā)之RadioGroup用法實(shí)例
這篇文章主要介紹了Android編程開發(fā)之RadioGroup用法,結(jié)合實(shí)例形式分析了Android中RadioGroup單選按鈕的具體使用技巧,需要的朋友可以參考下2015-12-12Android中的android:layout_weight使用詳解
layout_weight的作用是設(shè)置子空間在LinearLayout的重要度(控件的大小比重)。layout_weight的值越低,則控件越重要,下面為大家介紹下具體的使用方法2013-06-06