分享

电话短信问题

 w_hf的图书馆 2011-08-07

电话短信问题

其实无论呼入呼出 都可以使用receive捕获相关信息,当然 android不支持程序不能拨电话的 我们也是间接实现
public void onReceive(Context context, Intent intent){
    String action = intent.getAction();
        if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
                String number = getResultData();
                        if (number.startsWith(BYPASS_PREFIX)) {
                                     setResultData(number.substring(BYPASS_PREFIX.length()));
                               }
                         else {             // do additional processing        }    }

2.拆解短信
http://www./2008/12/android-api-sms-handling/
public class SMSReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent)    {
            Bundle myBundle = intent.getExtras();       
            SmsMessage [] messages = null;
            String strMessage = "";
                    if (myBundle != null)
                            {
                                        Object [] pdus = (Object[]) myBundle.get("pdus");
                                        messages = new SmsMessage[pdus.length];
                                        for (int i = 0; i < messages.length; i++)
                                                   {
                                                                  messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                                                                  strMessage += "SMS From: " + messages[i].getOriginatingAddress();
                                                                  strMessage += " : ";               
                                                                  strMessage += messages[i].getMessageBody();
                                                                                  strMessage += "\n";          
                                                     }
               Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();        }    }}
3.<manifest xmlns:android="http://schemas./apk/res/android"
        package="com.neocodenetworks.smsfwd"
        android:versionCode="1" 
        android:versionName="1.0">   
        <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
                <receiver android:name=".SmsReciever">
                            <intent-filter>
                                           <action android:name="android.provider.telephony.SMS_RECIEVED"></action>           
                            </intent-filter>
                </receiver>
               
       </application>
      
     <uses-sdk android:minSdkVersion="6" />   
     <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
      <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
      </manifest>

public class SmsReciever extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
       private static final String TAG = "smsfwd";
           @Override
          public void onReceive(Context context, Intent intent) {
                 Log.i(TAG, "Intent recieved: " + intent.getAction());
                   if (intent.getAction().equil(SMS_RECEIVED)) {
                              Bundle bundle = intent.getExtras();
                                         if (bundle != null) {
                                                        Object[] pdus = (Object[])bundle.get("pdus");
                                                       
                                                        final SmsMessage[] messages = new SmsMessage[pdus.length];
                                                        for (int i = 0; i < pdus.length; i++) {
                                                        messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                                                                       }
                                       if (messages.length > -1) {
                                                Log.i(TAG, "Message recieved: " + messages[0].getMessageBody()); 
                                               
                                                 NetComm.SendMessage("me", messages[0].getOriginatingAddress(), messages[0].getMessageBody());
                                                                 }            }        }    }

4.得到所有短信
Uri allMessage = Uri.parse("content://sms/");ContentResolver cr = getContentResolver();Cursor c = cr.query(allMessage, null, null, null, null);while  (c.moveToNext()) {   String row = c.getString(1);}
5.得到未读短信
for (int i = 0; i < messages.length; i++)            {                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                from = ""+messages[i].getOriginatingAddress();                body = ""+messages[i].getMessageBody();                inSIM = (messages[i].getIndexOnSim() != -1);                if (inSIM)                {                    int status = messages[i].getStatusOnSim();                    if (status == SmsManager.STATUS_ON_SIM_UNREAD)                    {                       Toast.makeText(context, "Message Unread on SIM: "+from+": "+body, Toast.LENGTH_SHORT).show();                    }                }                            } 

 

 

5.得到来电的电话号码:

<receiver android:name=".CustomBroadcastReceiver"> 
       
<intent-filter> 
               
<action android:name="android.intent.action.PHONE_STATE" />      
       
</intent-filter> 
</receiver> 
 
</application> 
<uses-sdk android:minSdkVersion="5" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
public class CustomPhoneStateListener extends PhoneStateListener { 
 
private static final String TAG = "CustomPhoneStateListener"; 
 
public void onCallStateChange(int state, String incomingNumber){ 
 
       
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!"); 
       
Log.v(TAG, incomingNumber); 
 
       
switch(state){ 
               
case TelephonyManager.CALL_STATE_RINGING: 
                       
Log.d(TAG, "RINGING"); 
                       
break; 
       
}        
} 
public class CustomBroadcastReceiver extends BroadcastReceiver { 
 
private static final String TAG = "CustomBroadcastReceiver"; 
 
@Override 
public void onReceive(Context context, Intent intent) { 
       
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!"); 
   
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
       
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); 
 
    telephony
.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
 
 
   
Bundle bundle = intent.getExtras(); 
   
String phoneNr= bundle.getString("incoming_number"); 
       
Log.v(TAG, "phoneNr: "+phoneNr); 
 
} 

4. 比较好的实例讲解http:///developing/story/sms-messaging-android

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多