練手小項目(4)安全衛士——黑名單攔截,廣播和服務的加入進行攔截,練手安全衛士

來源:互聯網
上載者:User

練手小項目(4)安全衛士——黑名單攔截,廣播和服務的加入進行攔截,練手安全衛士
 上一節講到,在資料庫進行添加和刪除,查詢的操作,這一節主要講怎麼用廣播和服務進行攔截 


為了能夠開啟服務 讓廣播同時關閉,所以我們不能將廣播在設定檔中進行註冊,不好管理,所以我們將廣播放在服務裡面。先建立一個服務。

CallSmsSafeService.java 

注意要在設定檔中註冊。

在前面的文章中我提過,服務就是一個沒有介面的activity,so 你要自己複寫,Oncreate 和Ondestory 方法進行註冊 和銷毀 服務和廣播。


    //1.執行個體化出來 廣播接收者

receiver = new InnerSmsReceiver();

    //2.註冊廣播接受者

registerReceiver(receiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));    //3.銷毀廣播<pre name="code" class="java">unregisterReceiver(receiver);

是不是發現和在設定檔中註冊是一個步驟, 一個監聽對象和一個 過濾器動作。

然後再我們自己定義的InnerSmsReceiver 寫上我們要執行的操作
private class InnerSmsReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {//檢測到來簡訊是否是黑名單號碼,設定簡訊攔截Object[] objs= (Object[]) intent.getExtras().get("pdus");for (Object obj : objs) {SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);//得到簡訊寄件者String sender = smsMessage.getOriginatingAddress();String mode = dao.findMode(sender);if("2".equals(mode)||"3".equals(mode)){abortBroadcast();}//示範代碼。String body = smsMessage.getMessageBody();if(body.contains("fapiao")){//你的頭髮票亮的很  語言分詞技術。abortBroadcast();}}}}


然後通過服務進行監聽來電電話階段
        //①先得到電話的管理服務
tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

//②進行註冊監聽和動作
           tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

    //③定義一個服務監聽來電
private class MyListener extends PhoneStateListener{@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING://零響狀態。String result = dao.findMode(incomingNumber);if("1".equals(result)||"3".equals(result)){endCall();}break;default:break;}}}
然後通過aidl 進行掛斷電話,因為從1.7版本以後 Google就把這個功能給隱藏掉了
public void endCall() {//IBinder iBinder = ServiceManager.getService(TELEPHONY_SERVICE);try {//載入servicemanager的位元組碼Class clazz = CallSmsSafeService.class.getClassLoader().loadClass("android.os.ServiceManager");Method method = clazz.getDeclaredMethod("getService", String.class);IBinder ibinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);ITelephony.Stub.asInterface(ibinder).endCall();} catch (Exception e) {e.printStackTrace();}}


記得在Ondestory中銷毀服務

tm.listen(listener, PhoneStateListener.LISTEN_NONE);

下一篇地址

練手小項目(3)安全衛士——黑名單攔截 利用內容提供者刪除通話記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.