日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

android教程

Android 廣播接收器(Broadcast Receivers)

閱讀 (2445)

Android 廣播接收器(Broadcast Receivers)

廣播接收器用于響應來之其他應用程序或者系統的廣播消息。這些消息有時被稱為事件或者意圖。例如,應用程序可以初始化廣播來讓其他的應用程序指導一些數據已經被下載到設備,并可以為他們所用。這樣廣播接收器可以定義適當的動作來攔截這些通信。

有以下兩個重要的步驟來使系統的廣播意圖配合廣播接收器工作。

  • 創建廣播接收器
  • 注冊廣播接收器

還有一個附加的步驟,要實現自定義的意圖,你必須創建并廣播這些意圖。


創建廣播接收器

廣播接收器需要實現為BroadcastReceiver類的子類,并重寫onReceive()方法來接收以Intent對象為參數的消息。

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

注冊廣播接收器

應用程序通過在AndroidManifest.xml中注冊廣播接收器來監聽制定的廣播意圖。假設我們將要注冊MyReceiver來監聽系統產生的ACTION_BOOT_COMPLETED事件。該事件由Android系統的啟動進程完成時發出。

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">

      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         </action>
      </intent-filter>

   </receiver>
</application>

現在,無論什么時候Android設備被啟動,都將被廣播接收器MyReceiver所攔截,并且在onReceive()中實現的邏輯將被執行。

有許多系統產生的事件被定義為類Intent中的靜態常量值。下面的表格列舉了重要的系統事件。

事件常量描述
android.intent.action.BATTERY_CHANGED持久的廣播,包含電池的充電狀態,級別和其他信息。
android.intent.action.BATTERY_LOW標識設備的低電量條件。
android.intent.action.BATTERY_OKAY標識電池在電量低之后,現在已經好了。
android.intent.action.BOOT_COMPLETED在系統完成啟動后廣播一次。
android.intent.action.BUG_REPORT顯示報告bug的活動。
android.intent.action.CALL執行呼叫數據指定的某人。
android.intent.action.CALL_BUTTON用戶點擊"呼叫"按鈕打開撥號器或者其他撥號的合適界面。
android.intent.action.DATE_CHANGED日期發生改變。
android.intent.action.REBOOT設備重啟。

廣播自定義意圖

如果你想要應用程序中生成并發送自定義意圖,你需要在活動類中通過sendBroadcast()來創建并發送這些意圖。如果你使用sendStickyBroadcast(Intent)方法,則意圖是持久的(sticky),這意味者你發出的意圖在廣播完成后一直保持著。

public void broadcastIntent(View view)
{
   Intent intent = new Intent();
   intent.setAction("cn.uprogrammer.CUSTOM_INTENT");
   sendBroadcast(intent);
}

cn.uprogrammer.CUSTOM_INTENT的意圖可以像之前我們注冊系統產生的意圖一樣被注冊。

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">

      <intent-filter>
         <action android:name="cn.uprogrammer.CUSTOM_INTENT">
         </action>
      </intent-filter>

   </receiver>
</application>

實例

這個實例將解釋如何創建廣播接收器來攔截自定義意圖。一旦你熟悉自定義意圖,你可以為應用程序編程來攔截系統產生的意圖。讓我們按照下面的步驟來修改Hello World實例章節中我們創建的Android應用程序。

步驟描述
1使用Android Studio來創建Android應用程序并命名為broadcastreceiver,并放在Hello World實例章節中的cn.uprogrammer.broadcastreceiver包下。
2修改主要活動文件MainActivity.java來添加broadcastIntent()方法。
3在cn.uprogrammer.broadcastreceiver包下創建名為MyReceiver.java的新的Java文件來定義廣播接收器。
4應用程序可以處理一個或多個自定義或者系統的意圖,沒有任何限制。每個你想攔截的意圖都需要使用<receiver.../>標簽在AndroidManifest.xml中注冊。
5修改res/layout/activity_main.xml文件中的默認內容來包含一個廣播意圖的按鈕。
6不需要修改字符串文件,Android Studio會注意string.xml文件。
7啟動Android模擬器來運行應用程序,并驗證應用程序所做改變的結果。

下面是修改的主要活動文件src/cn.uprogrammer.broadcastreceiver/MainActivity.java的內容。這個文件包含了每個基礎的生命周期方法。我們添加了broadcastIntent()方法來廣播自定義事件。

package cn.uprogrammer.broadcastreceiver;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Intent;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    // 廣播自定義意圖
    public void broadcastIntent(View view){
        Intent intent = new Intent();
        intent.setAction("cn.programmer.CUSTOM_INTENT");
        sendBroadcast(intent);
    }
}

下面是src/cn.uprogrammer.broadcastreceiver/MyReceiver.java的內容:

package cn.uprogrammer.broadcastreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "檢測到意圖。", Toast.LENGTH_LONG).show();
    }
}

接下來修改AndroidManifest.xml文件。這里通過添加<receiver.../>標簽來包含我們的廣播接收器:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.broadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

        </activity>

        <receiver android:name="MyReceiver">

            <intent-filter>
                <action android:name="cn.programmer.CUSTOM_INTENT">
                </action>
            </intent-filter>

        </receiver>

    </application>

</manifest>

下面是res/layout/activity_main.xml文件的內容,包含廣播自定義意圖的按鈕。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="廣播實例"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textSize="30dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="www.uprogrammer.cn"
        android:textColor="#ff87ff09"
        android:textSize="30dp"
        android:layout_above="@+id/imageButton"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40dp" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:src="@drawable/ic_launcher"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:text="廣播意圖"
        android:onClick="broadcastIntent"
        android:layout_below="@+id/imageButton"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

下面是res/values/strings.xml文件的內容,定義了兩個新的常量。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Android Broadcast Receiver</string>
    <string name="action_settings">Settings</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">Main Activity</string>

</resources>

讓我們運行剛剛修改的Hello World!應用程序。我假設你已經在安裝環境時創建了AVD。打開你的項目中的活動文件,點擊工具欄中的圖標來在Android Studio中運行應用程序。Android Studio在AVD上安裝應用程序并啟動它。如果一切順利,將在模擬器窗口上顯示如下:

現在點擊"廣播意圖"按鈕來廣播我們的自定義意圖。這將廣播我們的自定義意圖"cn.programmer.CUSTOM_INTENT",在我們注冊的廣播接收器MyReceiver中攔截并執行我們實現的邏輯。模擬器的底部將出現toast。如下:

你可以嘗試實現其他的廣播接收器來攔截系統產生的意圖,如系統啟動,日期改變和低電量等。

關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久久久久不卡 | 日日操夜夜 | 日韩av电影免费看 | 久久视频精品 | 欧美一区二区三区在线观看视频 | 精品视频久久久 | 国产精品久久久久一区二区三区共 | 久99久视频 | 99精品视频免费在线观看 | 成人激情av | 国产扒开脚做爽爽爽天美传媒 | 国产精品av在线 | 成人国产精品视频 | 欧美日韩亚洲二区 | 麻豆精品 | 中文字幕中文字幕 | 日韩黄色片 | 激情在线视频 | 国产精品zjzjzj在线观看 | 亚洲一区二区三区四区免费观看 | 欧洲精品二区 | 亚洲午夜精品视频 | 亚洲一区二区日本 | 中文精品一区 | 国产精品日韩一区二区三区 | 精品国产一区二区三区成人影院 | 亚洲成人免费 | 国产亚州av | 国产一区二区三区高清视频 | 色婷婷影院 | 韩日电影在线观看 | 亚洲视频一区在线观看 | 99精品视频在线免费观看 | 在线日韩一区 | 久久久久久久女女女又又 | 久久精品不卡 | 综合亚洲色图 | 精品精品 | 成人动漫在线播放 | 久久精品一区二区国产 | 成人免费大片黄在线播放 |