Android小項目之--電話與短信服務(附源碼)

it2022-05-09  26

  Android 上實現電話與短信服務相信己經是老生常談了,有些人或許認為沒有必要拿出來談,網上一抓一大把。確實是,網上現在有很多調用 Android 電話與短信服務的例子,今天特地拿出來談,只是因為有一些小技巧還是有拿出來談的必要的。

  

什麽是Intent

  使用 Intent之前我們有必要先認識一下 Intent。

  Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向 Android 表達某種請求或者意愿,Android 會根據意願的內容選擇適合的組件來請求。比如本例中使用的打電話功能,那么這個Acitivity只需要發出 Intent.ACTION_CALL 請求給Android ,剩下只要交給Android 來處理即可。

 

Intent的主要組成部份

  Intent對象抽象地描述了要執行的操作,其描述的基本內容可以分為組件名稱、Action(動作)、Data(數據)、Category(類別)、Extra(附加信息)和Flag(標誌位)6部份,具體的使用功能可查看相關文檔,這里不多介紹。

 

解析 Intent

  Intent是一種在不同組件之間傳遞的請求消息,是應用程序發出的請求和意圖。作為一個完整的消息傳遞機制, Intent 不僅需要發送端,還需要接收端。那么Intent如何解析 Intent 的請求內容,并選擇合適的組件響應 Intent 請求呢?本篇就會告訴大家,請繼續往下看。

 

Intent激活程序---電話與短信   

  本篇中使用的 Intent 打電話程序中,Intent 的行為是 ACTION_DIAL,同時在 Intent 中傳遞被呼叫人的電話號碼。

  撥打電話的關鍵有兩個方面,首先,要在 AndroidManifest 中添加 uses-permission(即為程序分配使用權限),并聲明android:name="android.permission.CALL_PHONE" 權限。由於打電話是屬於手機的底層服務,與用戶隱私及通話費用等話題息息相關,困此,程序必須取得權限。其次,通過自定義 Intent 對象,帶入“ACTION_CALL” 這個關鍵(Action),以及通過Uri.parse()的方法將用戶輸入電話號碼(Data)帶入,最后以 startActivity()方法,即可完成,代碼如下:

 

代码 import  android.app.Activity; import  android.content.Intent; import  android.net.Uri; import  android.os.Bundle; import  android.view.View; import  android.view.View.OnClickListener; import  android.widget. * ; public   class  phoneAndsmsAcitivity  extends  Activity {     private  Button myButton;     private  EditText myEditText;     /**  Called when the activity is first created.  */     @Override     public   void  onCreate(Bundle savedInstanceState) {         super .onCreate(savedInstanceState);        setContentView(R.layout.main);        myButton = (Button)findViewById(R.id.button);        myEditText = (EditText)findViewById(R.id.mobile);                myButton.setOnClickListener( new  OnClickListener() {                        @Override             public   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()));                phoneAndsmsAcitivity. this .startActivity(myIntent);                }            }        });    }}

 

運行效果:

  短信也是任何一款手機不可或缺的應用之一,幾乎是手機使用頻率最高的應用之一(不發短信的飄過~~~~~~)。Android自帶有一個發短信的類 SmsManager,利用這個類,我們可以完成手機的短信發送與接收工作,其中 sentTextMessage() 方法需要傳入五個值,依次是收件人地址(String)、發送人地址(String)、正文(String)、發送服務(PendingIntent)、與送達服務(PendingIntent),其中收件人與正文是不可為NULL的參數。跟打電話一樣,涉及到與金錢有關的必須在配置文件分配權限,權限代碼如下:<uses-permission android:name="android.permission.SEND_SMS"/>,smsManager的公開方法如下:

 

簡單的發送短信代碼:

代码 package  com.terry; import  java.util.List; import  android.app.Activity; import  android.app.PendingIntent; import  android.content.Intent; import  android.os.Bundle; import  android.telephony.gsm.SmsManager;  import  android.view.View; import  android.view.View.OnClickListener; import  android.widget.Button; import  android.widget.EditText; import  android.widget.Toast;@SuppressWarnings( " deprecation " ) public   class  smsAcitivity  extends  Activity {     private  Button myButton;     private  EditText myEditText;     private  EditText EditText2;    @Override     protected   void  onCreate(Bundle savedInstanceState) {         //  TODO Auto-generated method stub          super .onCreate(savedInstanceState);        setContentView(R.layout.sms);                myButton = (Button)findViewById(R.id.button);        myEditText = (EditText)findViewById(R.id.mobile);        EditText2 = (EditText)findViewById(R.id.content);                myButton.setOnClickListener( new  OnClickListener() {                         @Override             public   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(smsAcitivity. 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(smsAcitivity. this " 短信發送成功 " 1000 ).show();            }        });            }}

 

  關於一個測試的小技巧:發送短信的時候我們需要兩台機子可以測試,這時候我們要同時啟動兩個模擬器己達到發送與接收的效果,這時候你可以如下操作:開始 --cmd--emulator -data foo 依此在 dos 命令中輸入,即可重新打開一個模擬器,下麵是收送測試效果圖:

疑問:

   不知道有沒有細心的朋友發現。好像Google API 中不建議使用 smsManager 這個類來發送短信,如果是不建議那是否有另外的替代方案?如果知道的園友不妨告知一聲。。非常感激。

 

源碼下載:/Files/TerryBlog/phoneAndsms.rar

 

如果你有什麽疑問或者建議 你可以  QQ 285735942 Email:terryyhl@gmail.com

 

      

转载于:https://www.cnblogs.com/TerryBlog/archive/2010/06/09/1755152.html

相关资源:JAVA上百实例源码以及开源项目源代码

最新回复(0)