就如標題說個該如何使用Android發送簡訊? 而對於使用自訂的AlertDialog , Android的Dev Guide有篇文章講解的很不錯 , 讓AlertDialog不再那麼單調了。
首先是程式碼的部分
package com.android; import android.app.Activity; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; public class SMSAlertDialog extends Activity implements Button.OnClickListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ButtonContact = (Button) findViewById(R.id.ButtonContact); ButtonContact.setOnClickListener(this); EditTextMS = (EditText) findViewById(R.id.EditTextMS); } AlertDialog alertDialog; Button ButtonContact , ButtonOk , ButtonCancel; EditText EditTextMS , EditTextNumber; @Override public void onClick(View ButtonView) { // TODO Auto-generated method stub switch(ButtonView.getId()) { case R.id.ButtonContact: showAlertDialog(); break; case R.id.ButtonOk: SmsManager smsManager = SmsManager.getDefault(); //想獲得SmsManager物件必須呼叫static method SmsManager.getDefault(). //API Level 4 開始使用 android.telephony.SmsManager裡的 SmsManager.getDefault(); //API Level 1的android.telephony.gsm.SmsManager已不被推薦使用 PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0); //getBroadcast(Context context, int requestCode, Intent intent, int flags) //關於flags的說明可以參考官方的API Doc //http://developer.android.com/reference/android/app/PendingIntent.html smsManager.sendTextMessage(EditTextNumber.getText().toString(), null, EditTextMS.getText().toString(), pendingIntent, null); //傳送SMS Log.d(EditTextNumber.getText().toString(), EditTextMS.getText().toString()); alertDialog.dismiss(); break; case R.id.ButtonCancel: alertDialog.dismiss(); break; } } private void showAlertDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); final View layout = inflater.inflate( R.layout.customalertdialog, (LinearLayout) findViewById(R.id.layout_root)); //將customalertdialog.xml中的 R.id.layout_root的LinearLayout並return 一個View ImageView ImageViewPhone = (ImageView) layout.findViewById(R.id.ImageViewPhone); //因為要取出LinearLayout裡的元素 , 所以 要使用layout來呼叫findViewById(int R.id) method //否則會出現NullPointerException ImageViewPhone.setImageResource(R.drawable.phone); EditTextNumber = (EditText) layout.findViewById(R.id.EditTextNumber); ButtonOk = (Button) layout.findViewById(R.id.ButtonOk); ButtonOk.setOnClickListener(this); ButtonCancel = (Button) layout.findViewById(R.id.ButtonCancel); ButtonCancel.setOnClickListener(this); builder = new AlertDialog.Builder(this); builder.setTitle("連絡人號碼"); builder.setView(layout); alertDialog = builder.create(); //當一切都設置完成之後才可以create() alertDialog.show(); //顯示AlertDialog } }
由於我把custom AlertDialog的Layout存在另一個檔案customalertdialog.xml , 以下是他的內容
接下來是main.xml的內容
最後只要記得在AndroidManifest加上使用者權限就ok了
連絡人號碼我使用5556 , 是代表另一個模擬器的名稱 , 而我在IDEOS上測試過了也沒問題
這個5556模擬器已經收到來自剛剛5554模擬器發出的簡訊了
沒有留言:
張貼留言