Android 短信回复

   

      之前的版本是在Android 1.6的API上面开发的。因为在Android 2.0以后,获取联系人信息的API有所改动,所以之前的方式已经不适用了。而且我之前使用的方法有误,并没能获取电话号码。具体的看代码吧,仅对获取联系人那个部分做了改动。

      完整的项目源码已经上传到这里:微盘链接

[java]  view plain copy
  1. package com.myzhan;  
  2.   
  3. import java.util.ArrayList;    
  4.   
  5. import android.app.Activity;    
  6. import android.content.ContentResolver;    
  7. import android.database.Cursor;    
  8. import android.os.Bundle;    
  9. import android.provider.ContactsContract;  
  10. import android.provider.ContactsContract.PhoneLookup;  
  11. import android.telephony.*;    
  12. import android.view.View;    
  13. import android.widget.*;  
  14.   
  15. public class AutoSMS extends Activity {  
  16.       
  17.     private EditText SMSText = null;  
  18.     private Button startButton = null;  
  19.     private Button closeButton = null;  
  20.     private TextView instruction = null;  
  21.       
  22.     private ArrayList<String> nameList = null;  
  23.     private ArrayList<String> numberList = null;  
  24.     private TelephonyManager telephonyManager = null;  
  25.     private SmsManager smsManager = null;  
  26.       
  27.     private String incomingNumber = null;  
  28.     private boolean isMonitoring = false;  
  29.       
  30.     public void serviceControl(boolean isMonitoring){  
  31.         if(!isMonitoring){  
  32.             startService();  
  33.         }else{  
  34.             stopService();  
  35.         }  
  36.         this.isMonitoring = !this.isMonitoring;  
  37.     }  
  38.       
  39.     public void startService(){  
  40.           
  41.         nameList = new ArrayList<String>();  
  42.         numberList = new ArrayList<String>();   
  43.           
  44.         /* 
  45.          * 获取联系人信息,将联系人的名字存入nameList,将联系人的号码存入numberList 
  46.          */  
  47.         ContentResolver content = this.getContentResolver();  
  48.         Cursor cursor = content.query(ContactsContract.Contacts.CONTENT_URI, nullnullnullnull);  
  49.   
  50.         while(cursor.moveToNext()){   
  51.             //获取联系人的姓名  
  52.             nameList.add(cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)));  
  53.             //获取联系人的ID,并根据ID来获取电话号码  
  54.             //注意:一个联系人可以有多个电话号码,按照这种方式储存的话,nameList与numberList中的数据将失去联系  
  55.             String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
  56.             Cursor phoneCursor = content.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="+ contactId, nullnull);  
  57.             while(phoneCursor.moveToNext()){      
  58.                 String number = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
  59.                 numberList.add(number);  
  60.             }  
  61.         }  
  62.           
  63.         /* 设置一个监听通话状态的Listener 
  64.          * 如果状态有改变,先判断自动回复服务有没有启动,再判断是不是有来电 
  65.          * 如果满足“服务启动”和“有来电”两个条件,即发送自动回复的信息 
  66.          * */  
  67.         PhoneStateListener phoneListener = new PhoneStateListener(){  
  68.             @Override  
  69.             public void onCallStateChanged(int state,String incoming){  
  70.                 if(state == TelephonyManager.CALL_STATE_RINGING && isMonitoring){  
  71.                     //这里的电话号码格式类似于“12345678910”  
  72.                     //要将其格式化成“1-234-567-8910”这样的格式才能与numberList中的字符串匹配  
  73.                     incomingNumber = PhoneNumberUtils.formatNumber(incoming);  
  74.                     sendSMS();  
  75.                 }  
  76.             }  
  77.         };  
  78.           
  79.         telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);  
  80.         telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);  
  81.         smsManager = SmsManager.getDefault();  
  82.         instruction.setText("自动回复已经启动");  
  83.         }  
  84.       
  85.     public void stopService(){  
  86.         /* 自动回复服务是否生效取决于isMonitoring的值 
  87.          * 不过这里可以做更多事情,例如将引用设置为null 
  88.          * */  
  89.         instruction.setText("自动回复已经停止");  
  90.     }  
  91.       
  92.     public void sendSMS(){  
  93.         /* 简单来说,发送一条短信只需要 
  94.          * SmsManager smsManager = SmsManager.getDefault(); 
  95.          * String smsText = "短信内容"; 
  96.          * String number = "对方号码"; 
  97.          * smsManager.sendTextMessage(incomingNumber, null, smsText, null, null); 
  98.          * */  
  99.         if(numberList.contains(incomingNumber)){  
  100.             String smsText = SMSText.getText().toString();  
  101.             smsManager.sendTextMessage(incomingNumber, null, smsText, nullnull);  
  102.             instruction.setText("已经发送短信到" + incomingNumber);  
  103.         }  
  104.     }  
  105.       
  106.     /** Called when the activity is first created. */  
  107.     @Override  
  108.     public void onCreate(Bundle savedInstanceState) {  
  109.           
  110.         super.onCreate(savedInstanceState);  
  111.         setContentView(R.layout.main);  
  112.           
  113.         /* 这里就是和main.xml中的元素建立联系的时候啦! 
  114.          * */  
  115.         this.SMSText = (EditText)findViewById(R.id.SMSText);  
  116.         this.startButton = (Button)findViewById(R.id.startButton);  
  117.         this.closeButton = (Button)findViewById(R.id.closeButton);  
  118.         this.instruction = (TextView)findViewById(R.id.instruction);  
  119.           
  120.         /* 监听startButton点击事件的listener 
  121.          * 根据isMonitoring的布尔值来决定启动或者关闭服务 
  122.          * */  
  123.         startButton.setOnClickListener(new Button.OnClickListener()    
  124.         {    
  125.           @Override   
  126.           public void onClick(View v)    
  127.           {  
  128.               if(!isMonitoring){  
  129.                   startButton.setText("停止自动回复");  
  130.               }else{  
  131.                   startButton.setText("开始自动回复");  
  132.               }  
  133.               serviceControl(isMonitoring);  
  134.           }  
  135.         });  
  136.           
  137.         /* 关闭按钮,退出程序 
  138.          * */  
  139.         closeButton.setOnClickListener(new Button.OnClickListener()    
  140.         {    
  141.           @Override   
  142.           public void onClick(View v)    
  143.           {  
  144.               System.exit(0);  
  145.           }  
  146.         });  
  147.     }  
  148. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值