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

  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小項目之--電話與短信服務(附源碼)_第1张图片

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

 

Android小項目之--電話與短信服務(附源碼)_第2张图片

簡單的發送短信代碼:

代码
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 命令中輸入,即可重新打開一個模擬器,下麵是收送測試效果圖:

Android小項目之--電話與短信服務(附源碼)_第3张图片

疑問:

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

 

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

 

如果你有什麽疑問或者建議 你可以  QQ 285735942 Email:[email protected]

 

      

你可能感兴趣的:(android)