码迷,mamicode.com
首页 > 移动开发 > 详细

【手机勤务员】android自动切断来电,如果是手机号码回复一条短信

时间:2015-04-01 15:27:24      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

当你的手机需要更换新号码的时候,或者当你出国旅行不需要携带国内手机的时候,你的手机可以放在家中,当有人来电时自动挂断,如果对方是手机号码(11位长首位为1)就回复一条短信。

废话少提,直接上代码!

1、必须有如下权限:

<uses-permission android:name="android.permission.SEND_SMS" />  
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2、在工程的Package Explorer中的src按右键选New、Package,输入:com.android.internal.telephony

3、在com.android.internal.telephony按右键选New、File,文件名:ITelephony.aidl,输入的内容如下:

package com.android.internal.telephony;

interface ITelephony
{
        boolean endCall();
}

4、在MainActivity加入以下代码:

    private ITelephony  iTelephony = null;
    private TelephonyManager iTeleManager = null;
    
    public void initTelephony() {
    	iTeleManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
    	Class <TelephonyManager> c = TelephonyManager.class; 
    	Method getITelephonyMethod = null; 
    	try { 
    		getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[])null); 
    		getITelephonyMethod.setAccessible(true); 
    		iTelephony = (ITelephony) getITelephonyMethod.invoke(iTeleManager, (Object[])null); 
    	} catch (IllegalArgumentException e) { 
    		e.printStackTrace(); 
    	} catch (Exception e) { 
    		e.printStackTrace(); 
    	}
    }
    
    PhoneStateListener psl = new PhoneStateListener() {

    	@Override
    	public void onCallStateChanged(int state, String incomingNumber) {
    	    // TODO Auto-generated method stub
    		super.onCallStateChanged(state, incomingNumber);
    		switch(state){
    		case TelephonyManager.CALL_STATE_RINGING:
			Log.i("DEBUG", "uncall : " + incomingNumber);
			Message msg = new Message();
			msg.what = 3618;
			msg.obj = incomingNumber;
			handler.sendMessage(msg);
    			try {
   				// 当电话接入时,自动挂断。
   				iTelephony.endCall();
    			} catch (RemoteException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			break;
    		}
    	}
    	         
    };
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initTelephony();
		iTeleManager.listen(psl, PhoneStateListener.LISTEN_CALL_STATE);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		iTeleManager.listen(null, 0);
	}

    
    private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			myHandleMessage(msg);
		}
    	
    };
    
    private void myHandleMessage(Message msg) {
    	if(msg.what == 3618) {
    		String phoneNumber = (String)msg.obj; 
    		if(phoneNumber.length() == 11 && phoneNumber.charAt(0) == '1') {
    			 SmsManager sms = SmsManager.getDefault();
    			 String smsmsg = "您好,机主已经更新号码,有事请拨打:188 2318 3718。【手机勤务员】竭诚为您提供优质服务!";
    			 sms.sendTextMessage(phoneNumber, null, smsmsg, null, null);    			
    		}
    	}
    }

至此,手机勤务员的自动挂机并短信通知的优质服务宣告完成!

【手机勤务员】android自动切断来电,如果是手机号码回复一条短信

标签:

原文地址:http://blog.csdn.net/vnking/article/details/44806069

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!