標籤:
當你的手機需要更換新號碼的時候,或者當你出國旅行不需要攜帶國內手機的時候,你的手機可以放在家中,當有人來電時自動掛斷,如果對方是手機號碼(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; } } };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initTelephony();iTeleManager.listen(psl, PhoneStateListener.LISTEN_CALL_STATE);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();iTeleManager.listen(null, 0);} private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.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自動切斷來電,如果是手機號碼回複一條簡訊