您的位置:首页 > 移动开发 > Android开发

Android-广播接收者;短信监听

2012-07-08 12:35 411 查看
广播接收者

在android操作系统里面会有很多的广播事件。

BroadCastRecevier

SmsReceiver继承BroadCastRecevier

复写onRecevice(Context context,Intent intent)方法

//intent存放的有接收到的短信的内容

在AndroidManifest中设置

1.广播接收者的类名

2.接收目标的名字,优先级//如果程序中调用abortBroadcast();则结束广播事件,之后低优先级的程序都不会接受到广播

        <receiver

            android:name=".SmsReceiver"

            >

          <intent-filter android:priority="1000">

              <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

          </intent-filter>

pdus(短信内容)存放在intent里面

public void onReceive(Context context, Intent intent) {

// intent 存放的有接收到的短信的内容

Object[] pdus = (Object[]) intent.getExtras().get("pdus");

for (Object pdu : pdus) {

  SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);

// 获取短信的正文内容

  String content = message.getMessageBody();

//获取短信的发送者

  String address = message.getOriginatingAddress();

  System.out.println("信息内容:"+content);

  System.out.println("发送者"+address);

}

if("电话号码".equals(adress)){

abortBroadcast();

SmsManage manager = SmsManager.getDefault();

}

}

可设置优先级

然后再程序中调用

abortBroadcast();//结束广播

即可实现屏蔽短信

-----------------------------------------------------------------------------------------------

ip拨号

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

        <receiver android:name=".OutCallReciver" >

            <intent-filter android:priority="1000" >

                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

            </intent-filter>

        </receiver>

public class OutCallReciver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

  System.out.println(getResultData());

  System.out.println(intent.getAction());

  SharedPreferences data = context.getSharedPreferences("config", Context.MODE_PRIVATE);

  String ipnum = data.getString("tel", "");

  setResultData(ipnum+getResultData());

}

}

-----------------------------------------------------------------------------------------------------------

在代码中注册广播监听者

IntentFilter filter = new IntentFilter();;

SmsReceiver receiver = new SmsReceiver ();

receiverRegister(receiver,fileter);

BroadCastRecevier 有两种注册方式

1.清单文件里注册:一旦应用程序被部署到手机,广播接收者就会生效

2.代码里面注册:一旦代码所在的进程被杀死了,广播接收者就失效了。

广播接收者分为两种类型:

1.有序的广播。短信来到的广播  电话拨打的广播

-1000~1000 设置广播的优先级

android:priority="1000"

从高优先级->低优先级 一次传递

abortbroadcast()方法 可以终止广播事件.

2.无序的广播 

没有优先级 任何人 注册广播接受者的人,都可以接收到广播.

没有abortboradcast()方法

自定义广播

sendBroadcast(Intent intent);//发送广播

sendOrderedBroadcast(intent, receiverPermission );//发送一条有序的广播

sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras)

意图

权限

如果发送广播的时候,使用的是上面的api发送出去的  第三个参数resultReceiver指定了广播的接收者即便是中间把广播给终止了 他还是会接收到广播事件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息