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
Android -- Broadcast接收,布布扣,bubuko.com
时间: 2024-10-17 12:13:46