Method for registering BroadcastReceiver
BroadcastReceiver is used to listen for broadcast events (Intent). To achieve this purpose, BroadcastReceiver must be registered. There are two methods to register BroadcastReceiver:
1. Register in the application code
Register BroadcastReceiver: registerReceiver (receiver er, filter); // The filter function is the same as the <intent-filter> label.
Cancel the registration of BroadcastReceiver: unregisterReceiver (receiver ER );
If a BroadcastReceiver is used to update the UI, this method is usually used for registration,
Register BroadcastReceiver when the Activity is started, and cancel the registration after the Activity is invisible.
2. Register in androidManifest. xml (this method can receive broadcast events even if the application is closed and is always active)
<Cycler android: name = ". TestReceiver">
<Intent-filter> <! -- Determines the type of Receiver -->
<Action android: name = "android. intent. action. EDIT"/>
</Intent-filter>
</Cycler>
Note: In a higher version of android (estimated to be 4.0), authorization is required for text message monitoring. In mainframe. add the following code to xml to resolve the problem of onReceive failure after broadcasting.
<Uses-permission android: name = "android. permission. RECEIVE_SMS"/>
================ MainActivity. java =========================================
Package com. yx. testbc2;
Import android. OS. Bundle;
Import android. app. Activity;
Import android. content. IntentFilter;
Import android. view. LayoutInflater. Filter;
Import android. view. Menu;
Import android. view. View;
Import android. view. View. OnClickListener;
Import android. widget. Button;
Public class MainActivity extends Activity {
Private Button registerReceiver;
Private Button unregisterReceiver;
Private SMSReceiver smsReceiver = null;
Private static final String SMS_ACTION = "android. provider. Telephony. SMS_RECEIVED ";
@ Override
Protected void onCreate (Bundle savedInstanceState ){
Super. onCreate (savedInstanceState );
SetContentView (R. layout. activity_main );
RegisterReceiver = (Button) findViewById (R. id. registerReceiver );
UnregisterReceiver = (Button) findViewById (R. id. unregisterReceiver );
RegisterReceiver. setOnClickListener (new registerReceiverListener ());
UnregisterReceiver. setOnClickListener (new unregisterReceiverListener ());
}
@ Override
Public boolean onCreateOptionsMenu (Menu menu ){
// Inflate the menu; this adds items to the action bar if it is present.
GetMenuInflater (). inflate (R. menu. main, menu );
Return true;
}
Class registerReceiverListener implements OnClickListener {
@ Override
Public void onClick (View arg0 ){
// Generate a BroadcastReceiver object
SmsReceiver = new SMSReceiver ();
// Generate an IntentFilter object
IntentFilter filter = new IntentFilter ();
// Add an action for IntentFilter
Filter. addAction (SMS_ACTION );
// Register the BroadcastReceiver object to the system.
MainActivity. this. registerReceiver (smsReceiver, filter );
}
}
Class unregisterReceiverListener implements OnClickListener {
@ Override
Public void onClick (View arg0 ){
// Remove BroadcastReceiver
MainActivity. this. unregisterReceiver (smsReceiver );
}
}
}
====================== SMSReceiver. java =============================
Package com. yx. testbc2;
Import android. content. BroadcastReceiver;
Import android. content. Context;
Import android. content. Intent;
Import android. OS. Bundle;
Import android. telephony. SmsMessage;
Public class SMSReceiver extends BroadcastReceiver {
@ Override
Public void onReceive (Context arg0, Intent intent ){
System. out. println ("SMSReceiver --- onReceive ");
// Accept data in intent
Bundle bundle = intent. getExtras ();
// The Bundle object contains a property named "pdus". The value of this property is an Objec array.
Object [] myBJpdus = (Object []) bundle. get ("pdus ");
// Create an array of the SmsMessage type
SmsMessage [] message = new SmsMessage [myBJpdus. length];
System. out. println (message. length );
For (int I = 0; I <myBJpdus. length; I ++ ){
// Create an SmsMessgae Object using an Object in the Object Array
Message [I] = SmsMessage. createFromPdu (byte []) myBJpdus [I]);
System. out. println (message [I]. getMessageBody ());
}
}
}
============================= AndroidManifest. xml ============================
<? Xml version = "1.0" encoding = "UTF-8"?>
<Manifest xmlns: android = "http://schemas.android.com/apk/res/android"
Package = "com. yx. testbc2"
Android: versionCode = "1"
Android: versionName = "1.0" type = "codeph" text = "/codeph">
<Uses-sdk
Android: minSdkVersion = "8"
Android: targetSdkVersion = "18"/>
<Uses-permission android: name = "android. permission. RECEIVE_SMS"/>
<Application
Android: allowBackup = "true"
Android: icon = "@ drawable/ic_launcher"
Android: label = "@ string/app_name"
Android: theme = "@ style/AppTheme">
<Activity
Android: name = "com. yx. testbc2.MainActivity"
Android: label = "@ string/app_name">
<Intent-filter>
<Action android: name = "android. intent. action. MAIN"/>
<Category android: name = "android. intent. category. LAUNCHER"/>
</Intent-filter>
</Activity>
</Application>
</Manifest>