2012年4月1日 星期日

[TQC+ Android] 3-4 接收簡訊 Use SmsMessage , BroadcastReceiver





設計接收簡訊程式 , 以DDMS模擬產生一則簡訊 , 簡訊送達時使用Toast 顯示傳送者電話及簡訊內容 , 這題實作的技巧其實在之前的文章 [TQC+ Android] 3-2 接收SMS Use BroadcastReceiver, SmsMessage, onNewIntent 都講完了 , 而且這題只是單純的顯示接收到的簡訊內容 , 記得註冊user-permission 和 "android.provider.Telephony.SMS_RECEIVED" , 相當的簡單 , 以下是程式碼。


package COM.TQC.GDD03;

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class GDD03 extends Activity 
{ 
  private TextView mTextView1; 
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     
    mTextView1 = (TextView) findViewById(R.id.myTextView1); 
    mTextView1.setText("等待接收簡訊..."); 
  }
}
這是一個等待簡訊進來的 main Activity。






接下來是 GDD03_SM_Receiver.java , 是用來等待簡訊事件的


package COM.TQC.GDD03 ;

import java.util.Set;

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;



public class GDD03_SM_Receiver extends BroadcastReceiver 
{ 
 
  @Override 
  public void onReceive(Context context, Intent intent) 
  { 
    // TODO Auto-generated method stub 
    
    Toast t = Toast.makeText(context, "", Toast.LENGTH_LONG);
   
 if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
    {     
  Bundle bundle = intent.getExtras();
  
  //檢查一下返回的Bundle裡面有哪些的資訊, 檢查Key
  Set KeySet = bundle.keySet();
     
     for(String s : KeySet)
     {
        Log.d("We have key elements", "Key:"+s);
     }
          
  Object messages[] = (Object[]) bundle.get("pdus");
  SmsMessage[] smsMessage = new SmsMessage[messages.length];
  for (int n = 0; n < messages.length; n++)
  {
   smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
      //將原始的PDU格式的資料轉為smsMessage的格式, 由於傳入的簡訊由於長度的限制可能不止一封
  }
  
     t.setText("接收到來自:"+smsMessage[0].getOriginatingAddress()+"\n----傳來的簡訊----\n"+smsMessage[0].getDisplayMessageBody());
     t.show();
    }
    else
    {
     t.setText(intent.getAction());
     t.show();
    }   
  } 
} 






最後別忘了 AndroidManifest.xml

    
    
        
            
                
                
            
        
        
            
                
            
        
    
    
 






P.S. 題目中所要求的Variable和Method皆會保留 , 也會根據題目所要求的流程去實作 , 縱使題目要求繞遠路....



沒有留言:

張貼留言

Google Analytics