Broadcast是Android四大组件之一,是一种广泛运用的在应用程序之间传输信息的机制。最经典的举例是:

“我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理。”

  • 电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据。
  • 电台通过大功率的发射器发送内容,而在Android中则是通过sendBroadcast这个方法来发送。
  • 用户通过调整到具体的电台频率接受电台的内容。而在Android中要接受广播中的内容则是通过注册一个BroadCastReceiver来接收的。只有发送广播的action和接收广播的action相同,接受者才能接受这个广播。

我们拿代码说话

IP拨号的实现                                                                               

配置文件:

<receiver
android:name="com.iidcdut.ipcall.OutCallReceiver">
<intent-filter >
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>

onCreate里面主要是对SharePrefence配置,设置拨号时候要加的IP,然后BroadcastReceiver里面就是对要拨出去的号码进行加IP操作。

public class MainActivity extends Activity {

    private EditText edit_ipnumber;
private SharedPreferences sp; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); edit_ipnumber = (EditText) findViewById(R.id.edit_ipnumber);
sp = getSharedPreferences("config", MODE_PRIVATE);
edit_ipnumber.setText(sp.getString("ipnumber", "")); }
public void click(View view)
{
String ipnumber = edit_ipnumber.getText().toString();
Editor editor = sp.edit();
editor.putString("ipnumber", ipnumber);
editor.commit();
Toast.makeText(this, "设置OK", Toast.LENGTH_LONG).show();
} }

广播接收:

public class OutCallReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
System.out.println("onReceive 发现新外拨电话");
String number = getResultData();
System.out.println("number="+number); SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
String ipnumber = sp.getString("ipnumber", "");
String newnumber = ipnumber + number; setResultData(newnumber); } }

短信拦截                                                                                    

像360的app里面就有垃圾短信拦截的功能,其实就是通过广播实现的。

配置文件:

<receiver android:name="com.yydcdut.smslistener.SmsReceiver">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

广播里面:

public class SmsReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
System.out.println("收到短信"); Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for(Object pdu : pdus)
{
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String body = smsMessage.getMessageBody();
String sender = smsMessage.getOriginatingAddress();
System.out.println("body"+body);
System.out.println("sender"+sender); abortBroadcast();
} } }

我是天王盖地虎的分割线                                                                 

源代码:http://pan.baidu.com/s/1dD1Qx01

利用广播IP拨号.zip

短信窃(和谐)听(和谐)器.zip

转载请注明出处:http://www.cnblogs.com/yydcdut

最新文章

  1. 【python】nuitka封装python
  2. [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)
  3. GROUP BY和ORDER BY共用
  4. 【图像处理Matlab】2 灰度变换 imadjust stretchlim
  5. Oracle数据库的引导过程
  6. C 的 coroutine 库 via 云风的 BLOG
  7. c# winform动态生成控件与获取动态控件输入的值
  8. python实现发工资脚本
  9. 微信小程序之获取当前位置经纬度以及地图显示
  10. NET中解决KafKa多线程发送多主题的问题
  11. 201521123074 《Java程序设计》第14周学习总结
  12. JSP、Servlet、JDBC学习笔记
  13. SQLI DUMB SERIES-20
  14. [FJOI2015]火星商店问题(分治+可持久化)
  15. 面试汇总——说一下CSS盒模型
  16. piano class 12
  17. Flink - allowedLateness
  18. JavaScript:作用域与作用域链
  19. 打jar包
  20. 看阿里P9架构师如何向你定义架构及架构师

热门文章

  1. gVim 启动时窗口自动居中
  2. Screen 常用命令+VNC 启动停止命令总结
  3. 洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]
  4. 从Mybatis的视角去看Bean的初始化流程
  5. iOS 9音频应用播放音频之第一个ios9音频实例2
  6. kotlin 类 接口 抽象类 子类类型有限的class 。sealed class
  7. luoguP4284 [SHOI2014]概率充电器 概率期望树形DP
  8. 51nod1675 序列变换
  9. [POI2012]Squarks
  10. [ARC051D]長方形