就如標題說個該如何使用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模擬器發出的簡訊了


沒有留言:
張貼留言