日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓学习 之 广播(五)

發(fā)布時間:2024/2/28 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓学习 之 广播(五) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

廣播機制簡介

標準廣播:異步執(zhí)行,所有廣播接收器在同一時刻收到廣播消息,無法被截斷;

有序廣播:同步執(zhí)行,同一時刻只有一個廣播接收器接收到消息,有先后順序,可被后面廣播接收器截斷。

接收系統(tǒng)廣播

系統(tǒng)廣播譬如:電量變化、時間時區(qū)變化等。在代碼中注冊廣播稱為動態(tài)注冊,在AndroidManifest.xml中注冊稱為靜態(tài)注冊

動態(tài)注冊監(jiān)聽網(wǎng)絡(luò)變化

1.定義內(nèi)部類,繼承自BroadcastReceiver,并重寫父類onReceive方法,創(chuàng)建廣播接收器。

2.創(chuàng)建intentFilter實例,添加一個action的值,廣播接收器想接受什么廣播,在這里添加相應(yīng)的Action

一定要確定對應(yīng)的Action android.net.conn.CONNECTIVITY_CHANGE

3.創(chuàng)建NetworkChangeReceiver實例,調(diào)用registerReceiver來進行注冊,實現(xiàn)動態(tài)監(jiān)聽功能。

public class MainActivity extends Activity { private IntentFilter intentFilter;private NetworkChangeReceiver networkChangeReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter();intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");networkChangeReceiver = new NetworkChangeReceiver();registerReceiver(networkChangeReceiver, intentFilter); }@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver);} } class NetworkChangeReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();} }

靜態(tài)注冊實現(xiàn)開機啟動

  • 新建一個 BootCompleteReceiver 繼承自
    BroadcastReceiver
  • public class BootCompleteReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();} }
  • 然后修改 AndroidManifest.xml 文件
  • #注意要添加權(quán)限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > ……<receiver android:name=".BootCompleteReceiver" ><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver> </application>

    發(fā)送自定義廣播

    發(fā)送標準廣播

  • 定義廣播接受者
  • public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();} }
  • 對這個廣播接收器進行注冊
  • <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > ……<receiver android:name=".MyBroadcastReceiver"><intent-filter><action android:name="com.example.broadcasttest. MY_BROADCAST"/></intent-filter></receiver> </application>
  • 點擊按鈕發(fā)出該廣播
  • button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest. MY_BROADCAST");} });

    發(fā)送有序廣播

  • 將sendBroadcast(intent)變?yōu)閟endOrderedBroadcast(intent,null)
  • 將AndroidManifest.xml的intent_filter的優(yōu)先級android:priority="100"設(shè)置為100;
  • 值得一提的是第一個接受廣播者調(diào)用abortBroadcast()可以中斷廣播傳遞。
  • 發(fā)送本地廣播

    本地廣播機制支持能在程序內(nèi)部傳遞而且只接受本程序發(fā)出的廣播。

    // 獲取實例 localBroadcastManager = LocalBroadcastManager.getInstance(this); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");localBroadcastManager.sendBroadcast(intent); // 發(fā)送本地廣播} }); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter);
  • 獲得localBroadcastManager。
  • localBroadcastManager.registerReceiver()注冊廣播類型及對應(yīng)廣播接受者。
  • localBroadcastManager.sendBroadcast(intent); 發(fā)送廣播,被廣播接收者接收,觸發(fā)onreceive方法。
  • 總結(jié)

    以上是生活随笔為你收集整理的安卓学习 之 广播(五)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。