首發地址
http://www.eoeandroid.com/thread-228079-1-1.html
1 案例目的
本案例通過一個簡單通訊工具來鞏固android的activity、LinearLayout布局、基本控制項Button、打電話發簡訊以及應用程式互動通訊Intent的使用。本案例重點講解android中事件處理原理以及該原理在項目中的應用。
2 案例介紹 零距通這個通訊工具可以實現發簡訊打電話的功能,無論在天涯海角,只需使用零距通,讓你跟你的朋友,家人從此變成零距離無障礙溝通,零距通,讓你的生活從此零距離。
3 案例分析 本項目採用android2.3.3開發。由於該項目主要實現打電話發簡訊的功能,用Intent啟用程式---電話與簡訊本篇中使用的 Intent 打電話程式中,Intent 的行為是 ACTION_DIAL,同時在 Intent 中傳遞被呼叫人的電話號碼。撥打到電話的關鍵有兩個方面,首先,要在 AndroidManifest 中添加 uses-permission,並聲明android:name="android.permission.CALL_PHONE" 許可權。由於打電話是屬於手機的底層服務,與使用者隱私及通話費用等話題息息相關,困此,程式必須取得許可權。其次,通過自訂 Intent 對象,帶入“ACTION_CALL” 這個關鍵(Action),以及通過Uri.parse()的方法將使用者輸入電話號碼(Data)帶入,最後以 startActivity()方法,即可完成。要實現發簡訊的功能,必須要用到android系統中發簡訊的許可權,即在AndoridManifest.xml中添加如下內容
<uses-permissionandroid:name=”android.permission.SEND_SMS”/>
4 案例設計
單擊“發簡訊”,“打電話”按鈕時的事件處理流程如下: (1)建立“發簡訊”,“打電話”按鈕事件來源。 (2)事件來源向點擊事件監聽器類註冊。 (3)當點擊事件來源“發簡訊”,“打電話”按鈕時觸發事件並呼叫事件監聽器類中的onClick(View)方法處理商務邏輯。
5 商務邏輯設計
if(myeditText.getText().length()>0{Intent myIntent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+myeditText.getText().toString()));Phone.this.startActivity(myIntent);}String mobile=myEditText.getText().toString();String content=EditText2.getText().toString();SmsManager sms=SmsManager.getDefault();PendingIntent sentintent =PendingIntent.getBroadcast(SmsActivity.this,0, new Intent(), 0);
先來:
6 案例實現:
案例實現的部分重要代碼如下:1.首頁介面
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/bg"android:orientation="vertical" > <Button android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_marginBottom="165dp"android:layout_marginLeft="23dp"android:background="@drawable/button"android:text="打電話" /> <Button android:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/button1"android:layout_alignBottom="@+id/button1"android:layout_alignParentRight="true"android:background="@drawable/button"android:text="發簡訊"
2.主介面activity
public class SmsAndPhoneActivity extends Activity { /** Called when the activity is first created. */Button button1,button2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //根據ID尋找相應控制項 button1=(Button) findViewById(R.id.button1); button2=(Button) findViewById(R.id.button2); //按鈕監聽事件 button1.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stub //跳轉到打電話頁面 Intent intent = new Intent(SmsAndPhoneActivity.this, Phone.class); startActivity(intent); } }); button2.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stub //跳轉到發簡訊頁面 Intent intent1=new Intent(SmsAndPhoneActivity.this, SmsActivity.class); startActivity(intent1); } }); } }
3.發簡訊介面activity
public class SmsActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sms); Button butsend=(Button) findViewById(R.id.butsend); final EditText myEditText=(EditText)findViewById(R.id.mobile); final EditText EditText2=(EditText)findViewById(R.id.content); butsend.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stub String mobile=myEditText.getText().toString(); String content=EditText2.getText().toString(); SmsManager sms=SmsManager.getDefault(); PendingIntent sentintent =PendingIntent.getBroadcast(SmsActivity.this, 0, new Intent(), 0); try { if(content.length()>70) { List<String> msgs=sms.divideMessage(content); for(String msg:msgs) { sms.sendTextMessage(mobile, null, msg, sentintent, null); } } else{ sms.sendTextMessage(mobile, null, content, sentintent, null); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } Toast.makeText(SmsActivity.this, "簡訊發送成功", 1000).show(); } });
4.打電話介面Activity
public class Phone extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.phone); final EditText myeditText=(EditText) findViewById(R.id.myedittext); Button butphone=(Button) findViewById(R.id.butphone); butphone.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { // TODO Auto-generated method stub if(myeditText.getText().length()>0) { Intent myIntent=new Intent(Intent.ACTION_CALL,Uri.parse ("tel:"+myeditText.getText().toString())); Phone.this.startActivity(myIntent); } } }); } }
源碼下載:SmsAndPhone.zip