欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android廣播接收機(jī)制詳細(xì)介紹(附短信接收實(shí)現(xiàn))

 更新時(shí)間:2015年06月06日 10:28:30   投稿:junjie  
這篇文章主要介紹了Android廣播接收機(jī)制詳細(xì)介紹(附短信接收實(shí)現(xiàn)),本文講解了BroadcastReceiver的注冊(cè)過程BroadcastReceiver的步驟,并給出一個(gè)短信廣播實(shí)現(xiàn)示例,需要的朋友可以參考下

Android中廣播(BroadcastReceiver)的詳細(xì)講解.

1. BroadcastReceiver的注冊(cè)過程:
(1).廣播消息發(fā)出來后,只有訂閱了該廣播的對(duì)象才會(huì)接收發(fā)出來的廣播消息并做出相應(yīng)處理。
**(2).**Android廣播分為兩個(gè)方面:廣播發(fā)送者和廣播接收者。Android中的廣播使用了觀察者模式,基于消息的發(fā)布/訂閱事件模型。廣播接收者通過Binder機(jī)制向AMS進(jìn)行注冊(cè),AMS查找符合相應(yīng)條件的Broadcastreceiver,將廣播發(fā)送到BroadcastReceiver(一般情況下是Activity)相應(yīng)的消息循環(huán)隊(duì)列中。消息循環(huán)執(zhí)行拿到此廣播,回調(diào)BroadcastReceiver中的onReceive()方法。
(3).廣播發(fā)送者和廣播接收者的執(zhí)行順序是異步的,發(fā)出去的廣播不會(huì)關(guān)心有無接收者的接收,也不確定接收者是什么時(shí)候能接收到。
2. BroadcastReceiver的步驟:
(1).注冊(cè)廣播:廣播接收者在AMS中注冊(cè)廣播。
(2).發(fā)送廣播:廣播發(fā)送者向AMS中發(fā)送廣播。
(3).接收廣播:廣播接收者拿到廣播后調(diào)用onReceive()方法執(zhí)行。

以下是一個(gè)發(fā)送短信的例子,代碼如下:

BroadcastReceiverHelper 類:

package com.scd.broadcastreceiver.helper;

import com.scd.broadcastreceiver.activity.MainActivity;

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

/**
 * 廣播接收
 * 
 * @author scd
 * 
 */
public class BroadcastReceiverHelper extends BroadcastReceiver {
  /** 上下文 */
  private MainActivity mActivity = null;

  public BroadcastReceiverHelper(MainActivity mContext) {
    super();
    mActivity = mContext;
  }

  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(MainActivity.ACTION_SENDMESSAGE)) {
      toast("發(fā)送成功");
    } else if (intent.getAction()
        .equals(MainActivity.ACTION_DELIVERMESSAGE)) {
      toast("接收成功");
    }

  }

  public void toast(String text) {
    Toast.makeText(mActivity, text, Toast.LENGTH_SHORT).show();

  }

}


MainActivity類:

package com.scd.broadcastreceiver.activity;

import com.scd.broadcastreceiver.R;
import com.scd.broadcastreceiver.helper.BroadcastReceiverHelper;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
  private Button mButton = null;
  /** 發(fā)送短信 */
  public static String ACTION_SENDMESSAGE = "com.scd.broadcastreceiver.MainActivity.SendMessage";
  /** 接收短信 */
  public static String ACTION_DELIVERMESSAGE = "com.scd.broadcastreceiver.MainActivity.DeliverMessage";
  /** Reciver類 */
  private BroadcastReceiverHelper mHelperS = null;
  private BroadcastReceiverHelper mHelperD = null;
  /** 短信管理類 */
  private SmsManager mSmsManager = null;

  /** 電話號(hào)碼 */
  private String mTelephone = "13607567010";

  /** 短信內(nèi)容 */
  private String mContext = "你好,有什么需要幫助的嗎?";

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

    mButton = (Button) findViewById(R.id.sendBroadcast);
    mButton.setOnClickListener(this);
    mSmsManager = SmsManager.getDefault();
    // 注冊(cè)廣播
    registerBroadcast();
  }

  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.sendBroadcast: {
      //發(fā)送廣播
      sendBroadcastReceiver(mTelephone, mContext);
      break;
    }

    default:
      break;
    }

  }

  /**
   * 注冊(cè)廣播
   */
  public void registerBroadcast() {
    // 發(fā)送
    IntentFilter intentFilterS = new IntentFilter(ACTION_SENDMESSAGE);
    mHelperS = new BroadcastReceiverHelper(MainActivity.this);
    this.registerReceiver(mHelperS, intentFilterS);
    // 接收
    IntentFilter intentFilterD = new IntentFilter(ACTION_DELIVERMESSAGE);
    mHelperD = new BroadcastReceiverHelper(MainActivity.this);
    this.registerReceiver(mHelperD, intentFilterD);
  }

  /**
   * 發(fā)送廣播 短信發(fā)送的過程:發(fā)送的時(shí)候需要發(fā)送廣播一次,接收的時(shí)候需要發(fā)送廣播一次
   */
  public void sendBroadcastReceiver(String telephone, String content) {
    if (telephone != null) {
      Intent sIntent = new Intent(ACTION_SENDMESSAGE);
      // 短信成功發(fā)送后才發(fā)送該廣播
      PendingIntent sentIntent = PendingIntent.getBroadcast(
          MainActivity.this, 0, sIntent, 0);

      Intent dIntent = new Intent(ACTION_DELIVERMESSAGE);
      // 短信接收后才發(fā)送該廣播
      PendingIntent deliveryIntent = PendingIntent.getBroadcast(
          MainActivity.this, 0, dIntent, 0);
      mSmsManager.sendTextMessage(telephone, null, content, sentIntent,
          deliveryIntent);
      // this.sendBroadcast(intent);

    }

  }
}

注意:需要添加以下權(quán)限:

 

 <!-- 短信權(quán)限 -->
  <uses-permission android:name="android.permission.SEND_SMS" >
  </uses-permission>
  <uses-permission android:name="android.permission.READ_SMS" >
  </uses-permission>
  <uses-permission android:name="android.permission.RECEIVE_SMS" >
  </uses-permission>

相關(guān)文章

最新評(píng)論