1.廣播定義在一個單獨的檔案中
源碼:
public class MessageReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubif(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){}}}
在Manifest中註冊:
<receiver android:name=".MessageReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter></receiver>
使用代碼註冊:
//產生廣播處理 MessageReceiver smsBroadCastReceiver = new MessageReceiver (); //執行個體化過濾器並設定要過濾的廣播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); //註冊廣播 this.registerReceiver(smsBroadCastReceiver, intentFilter);
登出廣播:
unregisterReceiver(smsBroadCastReceiver);
2.廣播是內部類
public class SettingForSMS extends PreferenceActivity{@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.layout.sms_setting);}public static class MessageChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i(tag, "onReceive"); }}}
注意已定義流程中必須聲明為static,不然會找不到
在Manifest中註冊:
<receiver android:name=".SettingForSMS$MessageChangeReceiver"> <intent-filter> <action android:name="com.ginwave.message_changed"/> </intent-filter></receiver>
注意內部類使用$符號而不是.,使用.會出現類找不到異常
在程式內註冊,register是放在onCreate中,unregister是放在onDestroy中。
smsBroadCastReceiver = new MessageChangeReceiver (); //執行個體化過濾器並設定要過濾的廣播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.ginwave.message_changed"); //註冊廣播 this.registerReceiver(smsBroadCastReceiver, intentFilter);
unregisterReceiver(smsBroadCastReceiver);
希望以後使用的時候方便點~~