最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)應(yīng)用中Broadcast Receiver組件詳解

 更新時間:2016年11月09日 16:24:34   作者:Snail  
本篇文章主要介紹了Android開發(fā)應(yīng)用中Broadcast Receiver組件詳解,想要學(xué)習(xí)的同學(xué)可以了解一下。

BroadcastReceiver(廣播接收器)是Android中的四大組件之一。下面就具體介紹一下Broadcast Receiver組件的用法。

下面是Android Doc中關(guān)于BroadcastReceiver的概述:

①廣播接收器是一個專注于接收廣播通知信息,并做出對應(yīng)處理的組件。很多廣播是源自于系統(tǒng)代碼的──比如,通知時區(qū)改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應(yīng)用程序也可以進(jìn)行廣播──比如說,通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。

②應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類。

③廣播接收器沒有用戶界面。然而,它們可以啟動一個activity來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態(tài)欄上放一個持久的圖標(biāo),用戶可以打開它并獲取消息。

 Android中的廣播事件有兩種,一種就是系統(tǒng)廣播事件,比如:ACTION_BOOT_COMPLETED(系統(tǒng)啟動完成后觸發(fā)),ACTION_TIME_CHANGED(系統(tǒng)時間改變時觸發(fā)),ACTION_BATTERY_LOW(電量低時觸發(fā))等等。另外一種是我們自定義的廣播事件。

廣播事件的流程

①注冊廣播事件:注冊方式有兩種,一種是靜態(tài)注冊,就是在AndroidManifest.xml文件中定義,注冊的廣播接收器必須要繼承BroadcastReceiver;另一種是動態(tài)注冊,是在程序中使用Context.registerReceiver注冊,注冊的廣播接收器相當(dāng)于一個匿名類。兩種方式都需要IntentFIlter。

②發(fā)送廣播事件:通過Context.sendBroadcast來發(fā)送,由Intent來傳遞注冊時用到的Action。

③接收廣播事件:當(dāng)發(fā)送的廣播被接收器監(jiān)聽到后,會調(diào)用它的onReceive()方法,并將包含消息的Intent對象傳給它。onReceive中代碼的執(zhí)行時間不要超過5s,否則Android會彈出超時dialog。

下面我通過代碼演示自定義廣播事件和系統(tǒng)廣播事件的使用。

Step1:在MainActivity的onStart方法中注冊廣播事件。靜態(tài)注冊方式是在AndroidManifest.xml文件中。

Step2: 點擊相應(yīng)按鈕后會觸發(fā)相應(yīng)的方式來發(fā)送廣播消息。

/** 
 * MainActivity 
 * @author zuolongsnail 
 * 
 */ 
public class MainActivity extends Activity { 
  private Button sendStaticBtn; 
  private Button sendDynamicBtn; 
  private Button sendSystemBtn; 
  private static final String STATICACTION = "com.byread.static"; 
  private static final String DYNAMICACTION = "com.byread.dynamic"; 
  // USB設(shè)備連接 
  private static final String SYSTEMACTION = Intent.ACTION_POWER_CONNECTED; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    sendStaticBtn = (Button) findViewById(R.id.send_static); 
    sendDynamicBtn = (Button) findViewById(R.id.send_dynamic); 
    sendSystemBtn = (Button) findViewById(R.id.send_system); 
    sendStaticBtn.setOnClickListener(new MyOnClickListener()); 
    sendDynamicBtn.setOnClickListener(new MyOnClickListener()); 
    sendSystemBtn.setOnClickListener(new MyOnClickListener()); 
  } 
  class MyOnClickListener implements OnClickListener{ 
    @Override 
    public void onClick(View v) { 
      // 發(fā)送自定義靜態(tài)注冊廣播消息 
      if(v.getId() == R.id.send_static){ 
        Log.e("MainActivity", "發(fā)送自定義靜態(tài)注冊廣播消息"); 
        Intent intent = new Intent(); 
        intent.setAction(STATICACTION); 
        intent.putExtra("msg", "接收靜態(tài)注冊廣播成功!"); 
        sendBroadcast(intent); 
      } 
      // 發(fā)送自定義動態(tài)注冊廣播消息 
      else if(v.getId() == R.id.send_dynamic){ 
        Log.e("MainActivity", "發(fā)送自定義動態(tài)注冊廣播消息"); 
        Intent intent = new Intent(); 
        intent.setAction(DYNAMICACTION); 
        intent.putExtra("msg", "接收動態(tài)注冊廣播成功!"); 
        sendBroadcast(intent); 
      } 
      // 發(fā)送系統(tǒng)動態(tài)注冊廣播消息。當(dāng)手機連接充電設(shè)備時會由系統(tǒng)自己發(fā)送廣播消息。 
      else if(v.getId() == R.id.send_system){ 
        Log.e("MainActivity", "發(fā)送系統(tǒng)動態(tài)注冊廣播消息"); 
        Intent intent = new Intent(); 
        intent.setAction(SYSTEMACTION); 
        intent.putExtra("msg", "正在充電。。。。"); 
      } 
    } 
  } 
  @Override 
  protected void onStart() { 
    super.onStart(); 
    Log.e("MainActivity", "注冊廣播事件"); 
    // 注冊自定義動態(tài)廣播消息 
    IntentFilter filter_dynamic = new IntentFilter(); 
    filter_dynamic.addAction(DYNAMICACTION); 
    registerReceiver(dynamicReceiver, filter_dynamic); 
    // 注冊系統(tǒng)動態(tài)廣播消息 
    IntentFilter filter_system = new IntentFilter(); 
    filter_system.addAction(SYSTEMACTION); 
    registerReceiver(systemReceiver, filter_system); 
  } 
  private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() { 
     
    @Override 
    public void onReceive(Context context, Intent intent) { 
      Log.e("MainActivity", "接收自定義動態(tài)注冊廣播消息"); 
      if(intent.getAction().equals(DYNAMICACTION)){ 
        String msg = intent.getStringExtra("msg"); 
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
      } 
    } 
  }; 
  private BroadcastReceiver systemReceiver = new BroadcastReceiver() { 
     
    @Override 
    public void onReceive(Context context, Intent intent) { 
      Log.e("MainActivity", "接收系統(tǒng)動態(tài)注冊廣播消息"); 
      if(intent.getAction().equals(SYSTEMACTION)){ 
        String msg = intent.getStringExtra("msg"); 
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
      } 
    } 
  }; 
} 

Step3:接收廣播消息。以下為兩個靜態(tài)注冊的廣播接收器。

/** 
 * 自定義靜態(tài)注冊廣播消息接收器 
 * @author zuolongsnail 
 * 
 */ 
public class StaticReceiver extends BroadcastReceiver { 
 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
  } 
} 
/** 
 * 系統(tǒng)靜態(tài)注冊廣播消息接收器 
 * 
 * @author zuolongsnail 
 * 
 */ 
public class SystemReceiver extends BroadcastReceiver { 
 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) { 
      Log.e("SystemReceiver", "電量低提示"); 
      Toast.makeText(context, "您的手機電量偏低,請及時充電", Toast.LENGTH_SHORT).show(); 
    } 
  } 
} 

下面是AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.byread" android:versionCode="1" android:versionName="1.0"> 
  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".MainActivity" android:label="@string/app_name"> 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    <!-- 注冊自定義靜態(tài)廣播接收器 --> 
    <receiver android:name=".StaticReceiver"> 
      <intent-filter> 
        <action android:name="com.byread.static" /> 
      </intent-filter> 
    </receiver> 
    <!-- 注冊系統(tǒng)靜態(tài)廣播接收器 --> 
    <receiver android:name=".SystemReceiver"> 
      <intent-filter> 
        <action android:name="android.intent.action.BATTERY_LOW" /> 
      </intent-filter> 
    </receiver> 
  </application> 
</manifest> 

界面布局文件main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" android:layout_width="fill_parent" 
  android:layout_height="fill_parent"> 
  <TextView android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:text="@string/hello" /> 
  <Button android:id="@+id/send_static" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:text="發(fā)送自定義靜態(tài)注冊廣播" /> 
  <Button android:id="@+id/send_dynamic" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:text="發(fā)送自定義動態(tài)注冊廣播" /> 
  <Button android:id="@+id/send_system" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:text="發(fā)送系統(tǒng)動態(tài)注冊廣播" /> 
</LinearLayout> 

講解結(jié)束,不過有一點我自己也沒弄清楚,這個系統(tǒng)廣播事件如果我在程序中sendBroadcast的話,那就是自定義廣播了。如果不寫的話,那是不是系統(tǒng)自己來發(fā)送對應(yīng)Action廣播呢?有知道的同學(xué)請告訴我一下,再此先謝過。 

運行界面:


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

漳浦县| 鄂托克前旗| 金昌市| 涿州市| 红桥区| 乐昌市| 平远县| 沙田区| 奇台县| 龙江县| 山东省| 乡城县| 乡城县| 赫章县| 土默特右旗| 巴东县| 宁安市| 历史| 美姑县| 宝山区| 鲁甸县| 双牌县| 鄂伦春自治旗| 白银市| 潜山县| 屏边| 左权县| 湖北省| 白朗县| 岳阳县| 吐鲁番市| 永顺县| 西乡县| 长泰县| 泰安市| 久治县| 德惠市| 鄂托克前旗| 鹿邑县| 平果县| 泰兴市|