編輯:Android編程入門
收發短信應該是每個手機最基本的功能之一了,即使是許多年前的老手機也都會具備這項功能,而Android 作為出色的智能手機操作系統,自然也少不了在這方面的支持。今天我們開始自己創建一個簡單的發送和接收短信的應用。
目錄導航
項目的結構如下:一個簡單的接收和發送短信的功能
一、定義一個接收短信的廣播:當手機接收到一條短信的時候,系統會發出一條值為android.provider.Telephony.SMS_RECEIVED 的廣播,這條廣播裡攜帶著與短信相關的所有數據。
// 接收短信的廣播 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]); } String address = messages[0].getOriginatingAddress(); // 獲取發送方號碼 String fullMessage = ""; for (SmsMessage message : messages) { fullMessage += message.getMessageBody(); // 獲取短信內容 } textView.setText("address; " + address + ", message: " + fullMessage); abortBroadcast(); } }
二、 注冊廣播,這裡我們動態在代碼中注冊:
// 注冊接收廣播 IntentFilter intentFilter1 = new IntentFilter(); intentFilter1.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); intentFilter1.addAction("android.provider.Telephony.SMS_RECEIVED"); messageReceiver = new MessageReceiver(); registerReceiver(messageReceiver, intentFilter1);
三、 聲明權限:
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" />
一、 發送短信:用getDefault方法得到SmsManager對象,調用sendTextMessage方法發送短信
// 發送短信 public void send(View view) { SmsManager smsManager = SmsManager.getDefault(); String destinationAddress = "15527100207"; String text = "我愛你!"; Intent intent1 = new Intent(SENT_SMS_ACTION); PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, intent1, 0); Intent intent2 = new Intent(DELIVERY_SMS_ACTION); PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, intent2, 0); smsManager.sendTextMessage(destinationAddress, null, text, sentIntent, deliveryIntent); // aidl服務,進程間的通信 }
我們具體了解一下sendTextMessage方法一個參數的含義:
public void sendTextMessage(String destinationAddress, String scAddress, String text,PendingIntent sentIntent, PendingIntent deliveryIntent) destinationAddress: // 目的地,也就是對方的手機號 scAddress: // 服務中心地址,為空的話就是默認的SMSC text: // 發送消息的具體內容 sentIntent: // 當消息成功或者失敗發送時,就發起這個廣播 deliveryIntent: // 當消息到達目的地時,就發起這個廣播
三、 sentIntent的廣播:
// 發送短信的狀態廣播 class MessageBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 一個10位數的號碼發送,也能成功,但是對方沒有接收短信。 if (getResultCode() == RESULT_OK) { Toast.makeText(MainActivity.this, "發送成功!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "發送失敗!", Toast.LENGTH_SHORT).show(); } } }
四、 deliveryIntent的廣播:
// 當消息被傳遞給收件人時 class DeliveryBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(MainActivity.this, "對方接收短信成功!", Toast.LENGTH_SHORT).show(); } }
.xml<?xml version=1.0 encoding=utf-8?><LinearLayout xmlns:android=http://sch
實現雪花的效果其實也可以通過自定義View的方式來實現的(SurfaceView也是繼承自View的),而且操作上也相對簡單一些,當然也有一些
一個好的APP不僅有美觀,好看的界面,更需要良好的性能和穩定性。作為一名開發人員,需要理解界面設計原則並寫出優秀的界面設計代碼。本章主要講述基本控件的使用,界面布局及一些
我們在平時做開發的時候,免不了會用到各種各樣的對話框,相信有過其他平台開發經驗的朋友都會知道,大部分的平台都只提供了幾個最簡單的實現,如果我們想實現自己特定需求的對話框,