Sending text messages in Android is simple,
The first thing to do is to add the required permissions in the Mainfest.xml:
<uses-permissionAndroid:name= "Android.permission.SEND_SMS"></uses-permission><uses-permissionAndroid:name= "Android.permission.READ_SMS"></uses-permission><uses-permissionAndroid:name= "Android.permission.RECEIVE_SMS"></uses-permission>
For later testing convenience, simply add all the SMS permissions.
Method 1:
Public class extends Activity {... Private void send1 (string phone, string message) { = pendingintent.getactivity (Thisnew Intent ( this, testsms. class), 0); = Smsmanager.getdefault (); NULL NULL ); } }
Method 2:
If you want to know the status after the text message is sent, you need two receiver to realize
1 Private voidSend2 (string number, String message) {2String SENT = "Sms_sent";3String delivered = "sms_delivered";4 5Pendingintent SENTPI = pendingintent.getactivity ( This, 0,NewIntent (SENT), 0);6Pendingintent deliveredpi = pendingintent.getactivity ( This, 0,NewIntent (Delivered), 0);7 8Registerreceiver (NewBroadcastreceiver () {9 Ten @Override One Public voidOnReceive (Context context, Intent Intent) { A Switch(Getresultcode ()) - { - CaseACTIVITY.RESULT_OK: theLOG.I ("====>", "ACTIVITY.RESULT_OK"); - Break; - Casesmsmanager.result_error_generic_failure: -LOG.I ("====>", "Result_error_generic_failure"); + Break; - CaseSmsmanager.result_error_no_service: +LOG.I ("====>", "Result_error_no_service"); A Break; at CaseSMSMANAGER.RESULT_ERROR_NULL_PDU: -LOG.I ("====>", "RESULT_ERROR_NULL_PDU"); - Break; - CaseSmsmanager.result_error_radio_off: -LOG.I ("====>", "Result_error_radio_off"); - Break; in } - } to},NewIntentfilter (SENT)); + -Registerreceiver (NewBroadcastreceiver () { the @Override * Public voidOnReceive (Context context, Intent Intent) { $ Switch(Getresultcode ())Panax Notoginseng { - CaseACTIVITY.RESULT_OK: theLOG.I ("====>", "RESULT_OK"); + Break; A Caseactivity.result_canceled: theLOG.I ("=====>", "result_canceled"); + Break; - } $ } $},NewIntentfilter (Delivered)); - -Smsmanager SMSM =Smsmanager.getdefault (); theSmsm.sendtextmessage (number,NULL, message, SENTPI, deliveredpi); -}
In the simulator is not see receiver in the log information, according to the internet said on the mobile phone can be achieved, only a pity the hands of inorganic, can only be armchair.
Method 3:
Above are sent text files, if you want to send some non-text, such as encrypted data, you can use the following methods:
Private void Send2 (string number, String message) { = smsmanager.getdefault (); Short port = +; = Pendingintent.getbroadcast (test. thisnew Intent (), 0); NULL NULL );}
Method 4:
Call the system's SMS interface, this method requires the user to enter the receiver's phone number
1 Private void Send (String message) {2 New Intent (intent.action_view); 3 Sendintent.putextra ("Sms_body", message); 4 Sendintent.settype ("vnd.android-dir/mms-sms"); 5 }
This method automatically sets the number of the receiving party
1 Private void Send1 (string number, String message) {2 Uri uri = Uri.parse ("Smsto:" + number ); 3 New Intent (Intent.action_view, URI); 4 Sendintent.putextra ("Sms_body", message); 5 startactivity (sendintent); 6 }
Text message acceptance, need to implement Broadcastreceiver class, monitoring system messages
First, add a declaration in Mainfest.xml, Smsreceiver for the implementation of the class
<android:name= ". Smsreceiver "><intent-filter> < Android:name = "Android.provider.Telephony.SMS_RECEIVED" /> </ Intent-filter > </ receiver >
If this is method 3, you need to join when using Senddatamessage
<receiverAndroid:name=". Smsreceiver "> <Intent-filter> <ActionAndroid:name= "Android.intent.action.DATA_SMS_RECEIVED" /> <DataAndroid:scheme= "SMS" /> <DataAndroid:host= "localhost" /> <DataAndroid:port= "+" /></Intent-filter> </receiver>
The DAT data is commented out, the simulator can also receive text messages; port is not a problem when it is inconsistent with the ports value in Senddatamessage, it's amazing.
Public classSmsreceiverextendsBroadcastreceiver {@Override Public voidOnReceive (Context context, Intent Intent) {Bundle bundle=Intent.getextras (); Smsmessage[] Msgs=NULL; String phone; String message; if(Bundle! =NULL) {object[] PDUs= (object[]) bundle.get ("PDUs")); Msgs=NewSmsmessage[pdus.length]; for(inti = 0; i < msgs.length; i++) {Msgs[i]= SMSMESSAGE.CREATEFROMPDU ((byte[]) pdus[i]); Phone=msgs[i].getoriginatingaddress (); Message=Msgs[i].getmessagebody (); } } }}
If it is Senddatamessage sent:
1 Public classSmsreceiverextendsBroadcastreceiver {2 3 @Override4 Public voidOnReceive (Context context, Intent Intent) {5Bundle bundle =Intent.getextras ();6smsmessage[] Msgs =NULL;7 String phone;8 String message;9 Ten if(Bundle! =NULL){ OneObject[] PDUs = (object[]) bundle.get ("PDUs"); AMsgs =NewSmsmessage[pdus.length]; - for(inti = 0; i < msgs.length; i++){ -Msgs[i] = SMSMESSAGE.CREATEFROMPDU ((byte[]) pdus[i]); thePhone =msgs[i].getoriginatingaddress (); - byteData[] = SMSMESSAGE.CREATEFROMPDU ((byte[]) pdus[i]). Getuserdata (); -Message =NewString (data); - } + } - } +}
A different place is when a message is acquired using the Getuserdata () method.
Translated from: http://blog.csdn.net/rangq1/article/details/5793953
Android several ways to send text messages "Turn"