標籤:國際 ++ lte 開啟 手動 prot cti err state
效果:點擊傳送簡訊開始傳送簡訊
收到簡訊時將簡訊的內容顯示出來
代碼如下:
一、許可權聲明
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" />
二、代碼實現
我們的簡訊功能用到了SmsManager和SmsMessage兩個主要類。
當收不到簡訊時候,手動在應用管理中將應用的簡訊收發許可權開啟
//Java/** * Created by Linda on 16/5/14. * 簡訊的收發 * 根絕國際標準 每條簡訊的長度不超過160 個字元 * 如果簡訊長度過長,可以調用sendMultipartTextMessage()分隔成多條簡訊來發送 */ public class MesaageActivity extends Activity { private TextView sender; private TextView content; private EditText to;//接收簡訊的手機號碼 private EditText msgInput;//發送資訊的內容 private Button send; private IntentFilter receiveFilter;//簡訊接收 private MessageReceiver messageReceiver; private IntentFilter sendFilter;//簡訊發送 private SendStatusReceiver sendStatusReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.message); sender = (TextView) findViewById(R.id.sender); content = (TextView) findViewById(R.id.content); to = (EditText) findViewById(R.id.to); msgInput = (EditText) findViewById(R.id.msg_input); send = (Button) findViewById(R.id.send); // 註冊簡訊接收的廣播 receiveFilter = new IntentFilter(); receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); receiveFilter.setPriority(100); messageReceiver = new MessageReceiver(); registerReceiver(messageReceiver, receiveFilter); // 註冊監聽簡訊發送的廣播 sendFilter = new IntentFilter(); sendFilter.addAction("SENT_SMS_ACTION"); sendStatusReceiver = new SendStatusReceiver(); registerReceiver(sendStatusReceiver, sendFilter); // 點擊按鈕傳送簡訊 send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SmsManager smsManager = SmsManager.getDefault(); Intent sentIntent = new Intent("SENT_SMS_ACTION"); PendingIntent pi = PendingIntent.getBroadcast( MesaageActivity.this, 0, sentIntent, 0); //根據號碼和內容傳送簡訊(需要許可權) smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pi, null); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(messageReceiver); unregisterReceiver(sendStatusReceiver); } //簡訊接收的廣播 class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] pdus = (Object[]) bundle.get("pdus");//擷取簡訊數組 SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);//將pdu字元數群組轉換成SmsMessage對象 } String address = messages[0].getOriginatingAddress();//擷取簡訊發送方的號碼 String fullMessage = ""; for (SmsMessage message : messages) { fullMessage += message.getMessageBody();//擷取簡訊的內容 } sender.setText(address); content.setText(fullMessage); abortBroadcast(); } } //監聽廣播是否發送成功的廣播 class SendStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (getResultCode() == RESULT_OK) { Toast.makeText(context, "Send succeeded", Toast.LENGTH_LONG) .show(); } else { Toast.makeText(context, "Send failed", Toast.LENGTH_LONG) .show(); } } } }
Android收發簡訊