Activity_main.java
package com.tsots.Compare_BroadcastReceiver; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Activity_main extends Activity { Button b1; TextView tv1, tv2, tv3; String from = "There is no BroadcastReceiver yet"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1 = (Button) findViewById (R.id.button1); tv1 = (TextView) findViewById (R.id.textview1); tv2 = (TextView) findViewById (R.id.textview2); tv3 = (TextView) findViewById (R.id.textview3); /* * 透過Intent.ACTION_BATTERY_CHANGED取得battery資訊 */ b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { BroadcastReceiver_Battery br = new BroadcastReceiver_Battery(); registerReceiver(br, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } }); } /* * 過濾從以下class傳來的封包 * BroadcastReceiver_Battery.java * BroadcastReceiver_Boot.java * BroadcastReceiver_SMS.java */ @Override protected void onResume() { super.onResume(); try { IntentFilter mFilter1, mFilter2, mFilter3; mFilter1 = new IntentFilter(BroadcastReceiver_Battery.customize_ACTION); mFilter2 = new IntentFilter(BroadcastReceiver_Boot.customize_ACTION); mFilter3 = new IntentFilter(BroadcastReceiver_SMS.customize_ACTION); BroadcastReceiver_customize BRC = new BroadcastReceiver_customize(); registerReceiver(BRC, mFilter1); registerReceiver(BRC, mFilter2); registerReceiver(BRC, mFilter3); } catch(Exception e) { } } /* * 透過自訂的BroadcastReceiver擷取從以下class傳來的封包 * BroadcastReceiver_Battery.java * BroadcastReceiver_Boot.java * BroadcastReceiver_SMS.java * 並取得存在Service的資訊 */ public class BroadcastReceiver_customize extends BroadcastReceiver { static final String customize_ACTION = "com.tsots.Compare_BroadcastReceiver.CUSTOMIZE"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(customize_ACTION)) { Bundle bundle_from = intent.getExtras(); if (bundle_from != null) { from = bundle_from.getString("FROM"); } } System.out.println(from); if(from.equals("the BroadcastReceiver is from BroadcastReceiver_Battery")) { tv1.setText(new Service_receiveBR().str_battery); } else if(from.equals("the BroadcastReceiver is from BroadcastReceiver_Boot")) { tv2.setText(new Service_receiveBR().str_boot); } else { tv3.setText(new Service_receiveBR().str_sms); } } } }
BroadcastReceiver_SMS.java
package com.tsots.Compare_BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; public class BroadcastReceiver_SMS extends BroadcastReceiver { private static final String sms_ACTION = "android.provider.Telephony.SMS_RECEIVED"; static final String customize_ACTION = "com.tsots.Compare_BroadcastReceiver.CUSTOMIZE"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(sms_ACTION)) { StringBuilder sb = new StringBuilder(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] myOBJpdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[myOBJpdus.length]; for (int i = 0; i BroadcastReceiver_Boot.javapackage com.tsots.Compare_BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; public class BroadcastReceiver_Boot extends BroadcastReceiver { private static final String boot_ACTION = "android.intent.action.BOOT_COMPLETED"; static final String customize_ACTION = "com.tsots.Compare_BroadcastReceiver.CUSTOMIZE"; //取得系統時間 java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(boot_ACTION)) { StringBuilder sb = new StringBuilder(); sb.append("開機時間: "); sb.append(sdf.format(new java.util.Date())); Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); //啟動Service服務並將boot資訊傳過去 intent.setClass(context, Service_receiveBR.class); Bundle bundle_br_boot = new Bundle(); bundle_br_boot.putString("MESSAGE_BOOT", sb.toString()); intent.putExtras(bundle_br_boot); context.startService(intent); //送出廣播"android.intent.action.BOOT_COMPLETED" Intent intent_BroadcastToActivity = new Intent(customize_ACTION); intent_BroadcastToActivity.putExtra("FROM", "the BroadcastReceiver is from BroadcastReceiver_Boot"); context.sendBroadcast(intent_BroadcastToActivity); } } }BroadcastReceiver_Battery.javapackage com.tsots.Compare_BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; public class BroadcastReceiver_Battery extends BroadcastReceiver { private static final String battery_ACTION = "android.intent.action.BATTERY_CHANGED"; public static final String customize_ACTION ="com.tsots.Compare_BroadcastReceiver.CUSTOMIZE"; private int intLevel; private int intScale; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(battery_ACTION)) { //level: 電池剩餘容量 intLevel = intent.getIntExtra("level", 0); //scale: 電池最大值;通常為100 intScale = intent.getIntExtra("scale", 100); StringBuilder sb = new StringBuilder(); Bundle bundle = intent.getExtras(); if (bundle != null) { sb.append("目前電量:"); sb.append(String.valueOf(intLevel * 100 / intScale) + "%"); } Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); //啟動Service服務並將battery資訊傳過去 intent.setClass(context, Service_receiveBR.class); Bundle bundle_br_battery = new Bundle(); bundle_br_battery.putString("MESSAGE_BATTERY", sb.toString()); intent.putExtras(bundle_br_battery); context.startService(intent); //送出廣播"android.intent.action.BOOT_COMPLETED" Intent intent_BroadcastToActivity = new Intent(customize_ACTION); intent_BroadcastToActivity.putExtra("FROM", "the BroadcastReceiver is from BroadcastReceiver_Battery"); context.sendBroadcast(intent_BroadcastToActivity); } } }Service_receiveBR.javapackage com.tsots.Compare_BroadcastReceiver; import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; /* * 用此Service存住battery,boot,SMS的資訊 */ public class Service_receiveBR extends Service { static String str_battery; static String str_boot; static String str_sms; @Override public void onCreate() { super.onCreate(); } @Override public void onStart(Intent intent, int startId) { Bundle bundle = intent.getExtras(); if(bundle != null) { str_battery = bundle.getString("MESSAGE_BATTERY"); str_boot = bundle.getString("MESSAGE_BOOT"); str_sms = bundle.getString("MESSAGE_SMS"); } super.onStart(intent, startId); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }
沒有留言:
張貼留言