1. 程式人生 > >Android四大元件之廣播接收者(BroadcastReceiver)

Android四大元件之廣播接收者(BroadcastReceiver)

廣播接收者簡介:
為了監聽來自系統或應用程式的廣播事件,Android系統提供了BroadcastReceiver(廣播接收者)元件。
廣播接收者建立:
右擊—-包名—-new—-Other—-Broadcast Receiver—-名字自取、其他預設

預設:繼承BroadcastReceiver類,重寫onReceive()方法

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
         throw
new UnsupportedOperationException("Not yet implemented"); } }

靜態註冊(自動):

<?xml version="1.0" encoding="utf-8"?>
<manifest ......>
    <application ......>
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported
="true">
</receiver> </application> </manifest>

enabled:用於選擇廣播接收者是否可以由系統例項化
exported:用於選擇是否接受當前程式之外的廣播

動態註冊:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyReceiver receiver=new MyReceiver();
        String action="android.provider.Telephoto.SMS_RECEIVED"
; IntentFilter intentFilter=new IntentFilter(action); registerReceiver(receiver,intentFilter); } protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); }

案例:攔截電話
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sdz"
    android:padding="15dp"
    tools:context="cn.edu.bzu.myapplication.MainActivity">

    <EditText
        android:id="@+id/et_ipnumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="請輸入攔截號碼" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_ipnumber"
        android:layout_centerHorizontal="true"
        android:background="#ACD6FF"
        android:onClick="click"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:text="儲存攔截號碼"
        android:textSize="16sp" />
</RelativeLayout>

MainActivity:點選儲存攔截號碼按鈕時事件處理

package cn.edu.bzu.myapplication;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private EditText et_ipnumber;
    private SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_ipnumber = (EditText) findViewById(R.id.et_ipnumber);
        //建立SharedPreferences物件
        sp = getSharedPreferences("config", MODE_PRIVATE);
    }

    public void click(View view) {
        //獲取使用者輸入的攔截號碼
        String number = et_ipnumber.getText().toString().trim();
        //建立Editor物件,儲存使用者輸入的攔截號碼
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("number", number);
        editor.commit();
        Toast.makeText(this, "儲存成功", Toast.LENGTH_SHORT).show();
    }
}

MyReceiver:建立廣播接收者MyReceiver

package cn.edu.bzu.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        //獲取撥打的電話號碼
        String outcallnumber = getResultData();
        //建立SharedPreferences物件,獲取攔截號碼
        SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        String number = sp.getString("number", "");
        //判斷是否是攔截電話號碼
        if (outcallnumber.equals("number")) {
            //清楚電話
            setResultData(null);
        }
    }
}

註冊廣播接受者:

<?xml version="1.0" encoding="utf-8"?>
<manifest ......>
    <application ......>
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">   
             <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>        
        </receiver>       
    </application>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
</manifest>

:廣播接收者對應的動作。意圖過濾器,電話播出的過濾器。
:許可權設定
這裡寫圖片描述

相關推薦

Android四大元件廣播接收者BroadcastReceiver

廣播接收者簡介: 為了監聽來自系統或應用程式的廣播事件,Android系統提供了BroadcastReceiver(廣播接收者)元件。 廣播接收者建立: 右擊—-包名—-new—-Other—-Broadcast Receiver—-名字自取、其他預設

四大元件廣播接收者BroadCastReceiver

為什麼需要廣播接收者? 生活中有什麼樣的人需要聽廣播呢?比方說老人聽聽廣播解解悶,計程車司機聽聽廣播瞭解一下當前的路況資訊,寂寞的大學生聽一些音樂和情感夜話等等,他們都是有接收廣播的需求的,在android開發中很多app也需要接收這樣的廣播來獲取一些資訊,所以

Android:四大元件-----廣播Broadcast

相信很多讀者都與筆者一樣,在剛學安卓的時候就接觸到廣播。但是並不知道廣播其實也分好幾種,我們剛學習使用的只是廣播的其中一種:普通廣播 android的廣播分為: 普通廣播, 有序廣播, 本地廣播, sticky廣播, 下面就為大家介紹一下這四種廣播的區別與用法。 一.普通

Android四大元件BroadcastReceiver廣播

什麼是廣播 廣播是一個全域性的監聽器,屬於Android四大元件之一,它分為兩個角色:廣播發送者、廣播接收者 廣播用於不同元件之間(應用內/不同應用之間),還有多執行緒之間的通訊 - 廣播的

Android--四大元件BroadCastReceiver生命週期、實現原理及使用等

####1. BroadCastReceiver是什麼? ####2. 廣播型別 ######1). 有序廣播 ######2). 無序廣播 ####3. 生命週期 ####4. 實現原理 ####5. 使用方法 ####6. 許可權問題(安全性) ####7. LocalBroad

Android四大元件BroadcastReceiver

(一)概述 上節我們對BroadcastReceiver已經有了一個初步的瞭解了,知道兩種廣播型別:標準與有序, 動態或靜態註冊廣播接收者,監聽系統廣播,自己傳送廣播!已經滿足我們的基本需求了~ 但是前面寫的廣播都是全域性廣播!這同樣意味著我們APP發出的廣播

Android--四大元件Activity

####1. Activity是什麼? ####2. 生命週期 ######1). Activity跳轉 ######2). 從後臺啟動 ######3). 橫豎屏切換 ####3. 啟動模式 ######1). 任務棧 ######2). laucherMode ######3).

Android四大元件ContentProvider

上節提到的四大元件之ContentProvider的簡單使用,在這篇文章中詳細的介紹其中的一些方法。 1.String getType(Uri uri)方法 首先看看官方對它的解釋: /** * Implement this to handle requests

Android四大元件ContentProvider

1.什麼是ContentProvider? 內容提供程式管理對資料結構化資料集的訪問。它們封裝資料,並提供用於定義資料安全性的機制。內容提供者是連線一個程序中的資料與另一個程序中執行的程式碼的標準介面。 是不同應用程式之間進行資料交換的標準API,以某種Uri的形式對外提供資料,

Android四大元件BroadcastReceiver應用詳解

今天我們來講一下Android中BroadcastReceiver的相關知識。 BroadcastReceiver也就是“廣播接收者”的意思,顧名思義,它就是用來接收來自系統和應用中的廣播。 在Android系統中,廣播體現在方方面面,例如當開機完成後系統會產生一條廣播,接收到這條廣播就能實

Android四大元件Service全面解析

 在小杰的上一篇博文中給大家講了一下Android四大元件之一的Activity,也是最重要的,這一篇文章,給大家講一下Service。 什麼是Service  Service是Android的四大元件之一應用廣泛,它是一個能在後臺進行一個長時間的操作並且不提供使用者介面

android四大元件Broadcast(廣播)使用詳解

一 概述 Broadcast作為android中的四大元件,其重要性可想而知, 在android系統中,廣播(Broadcast)是在元件之間傳播資料(Intent)的一種機制;這些元件甚至是可以位於

Android 四大元件BroadcastReceiver

前言 Android四大元件重要性已經不言而喻了,今天談談的是Android中的廣播機制。在我們上學的時候,每個班級的教室裡都會裝有一個喇叭,這些喇叭都是接入到學校的廣播室的,一旦有什麼重要的通知,就會播放一條廣播來告知全校的師生。類似的工作機制其實在計算機領域也有很廣泛的應用,如果你瞭解網路通訊原理應該會知

Android四大元件之一 廣播接受者入門附程式碼詳解

BroadCastReceiver 廣播機制 BroadcastRecevier是Android的四大元件之一。一、廣播的分類: 1.普通廣播        當手機應用程式中一旦觸發了某件事情,那麼就會發送一段廣播,這段廣播時非同步的,能夠被所有的廣播監聽者接收,進行處理。

Android四大元件BroadcastReceiver

1. 概述 BroadcastReceiver,中文翻譯為“廣播接收器“,要了解廣播接收器的定義,先介紹一下Broadcast(廣播)的含義: Broadcast:廣播 它是實現不同(應用)程式或者是同一個應用程式內部進行訊息傳遞的一種機制,它的功能定義

Android四大元件ContentProvider內容提供者

ContentProvider是什麼 ContentProvider是Android中的四大元件之一,主要用於不用應用之間共享資料,通過ContentProvider把應用中的資料共享給其他應用訪問,其他應用可以通過ContentProvider對指定應用中

Android四大元件 Activity

(一)概述 本節開始講解Android的四大元件之一的Activity(活動); 官方文件: Activity是一個應用程式的元件,他在螢幕上提供了一個區域,允許使用者在上面做一些互動性的操作, 比如打電話,照相,傳送郵件,或者顯示一個地圖!Activit

Android四大元件BroadcastReceiver工作原理

1.廣播的註冊 As we all know,廣播的註冊也是分兩種:動態註冊和靜態註冊,前者是在Activity生命週期中用java程式碼註冊和解除註冊,後者是在AndroidManifest檔案中。後者在安裝時由PKMS解析並註冊的,後續會單獨分析,這裡只分析廣播的動態註

Android四大元件BroadcastReceiver的使用

工作之餘,有些閒功夫,想想還是總結一下基礎知識,Android廣播在專案中使用還是比較多的,相對於四大元件,可能僅次於Activity的使用。首先,我們得知道廣播的作用:從字面意思上來看,廣播就好比收音機通知收聽者,同時也能攜帶廣播資訊。廣播的種類可分為有序廣播和無需廣播,

Android 四大元件Service的啟動、繫結小述

一、概述 學習過Android的小夥伴就不可能不知道Service是什麼,因為Service是Android四大元件之一,聲名赫赫有木有,所以在這裡我就不詳細介紹了,本節主要還是充當筆記的作用,因為我待記性如初戀,記性虐我千百遍。 二、Service的建立 Service是一