編輯:關於android開發
前面我們把需要攔截的手機號都存儲和展示出來了,接下來是使用廣播接收者攔截短信了,這個廣播接收者需要和一個服務綁定,服務開啟的時候,接收者存在,服務停掉時,接收者關閉
在service包下定義一個類CallSmsSafeService繼承系統的Service
重寫onCreate()方法
獲取BroadcastReceiver對象,new出來
調用registerReceiver()方法,注冊廣播,參數:BroadcastReceiver對象,IntentFillter對象
重寫onDestory()方法
調用unregisterReceiver()方法,參數:BroadcastReceiver對象
BroadcastReceiver對象置為null
定義一個內部類InnerSmsReceiver繼承系統的BroadcastReceiver
重寫 onReceive()方法,傳遞進來參數:Context對象,Intent對象
調用Intent對象的getExtras().get(“pdus”)方法,獲取到Object[]數組
for循環Object[]數組,每個是Object對象
調用SmsMessage.createFromPdu()方法,獲取到SmsMessage對象,參數:byte[]數組,強轉Object對象
調用SmsMessage對象的getOriginatingAddress()方法,得到String發件人
調用Dao對象的查詢數據庫方法,查出這條短信的攔截模式
判斷攔截模式,如果是全部攔截3或者短信攔截2,就調用abortBroadcast()方法
在設置中心對上面的服務進行配置,達到開啟和關閉的功能
查看這篇:http://www.cnblogs.com/taoshihan/p/5468523.html
CallSmsSafeService.java
package com.qingguow.mobilesafe.service; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.telephony.SmsMessage; import com.qingguow.mobilesafe.db.ado.BlackNumberAdo; /** * 短息電話攔截服務 * @author taoshihan * */ public class CallSmsSafeService extends Service { private InnerSmsReceiver receiver; private BlackNumberAdo ado; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } /** * 服務創建 */ @Override public void onCreate() { receiver=new InnerSmsReceiver(); IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); ado=new BlackNumberAdo(getApplicationContext()); registerReceiver(receiver, filter); super.onCreate(); } /** * 接收廣播 * @author taoshihan * */ private class InnerSmsReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Object[] objs=(Object[]) intent.getExtras().get("pdus"); for(Object obj:objs){ SmsMessage sms=SmsMessage.createFromPdu((byte[]) obj); String sender=sms.getOriginatingAddress(); String mode=ado.find(sender); if(mode!=null){ if (mode.equals("2") || mode.equals("3")) { System.out.println("攔截短信:" + sender); abortBroadcast(); } } } } } @Override public void onDestroy() { unregisterReceiver(receiver); receiver=null; super.onDestroy(); } }
ado類
package com.qingguow.mobilesafe.db.ado; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.qingguow.mobilesafe.db.BlackNumberDBOpenHelper; public class BlackNumberAdo { private BlackNumberDBOpenHelper helper; public BlackNumberAdo(Context context) { helper = new BlackNumberDBOpenHelper(context); } /** * 插入數據 * * @param phone * @param mode */ public void add(String phone, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.insert("blacknumber", null, values); db.close(); } /** * 查詢全部 * * @return */ public List<Map<String, String>> findAll() { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery( "select phone,mode from blacknumber order by id desc", null); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); while (cursor.moveToNext()) { Map<String, String> info = new HashMap<String, String>(); String phone = cursor.getString(0); String mode = cursor.getString(1); info.put("phone", phone); info.put("mode", mode); list.add(info); } cursor.close(); db.close(); return list; } /** * 修改數據 * * @param phone * @param mode */ public void update(String phone, String mode) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("phone", phone); values.put("mode", mode); db.update("blacknumber", values, "phone=?", new String[] { phone }); db.close(); } /** * 刪除數據 * * @param phone */ public void delete(String phone) { SQLiteDatabase db = helper.getWritableDatabase(); db.delete("blacknumber", "phone=?", new String[] { phone }); db.close(); } /** * 查找單條 * * @param phone */ public String find(String phone) { SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery( "select mode from blacknumber where phone=?", new String[] { phone }); if (cursor.moveToNext()) { String mode = cursor.getString(0); return mode; } return null; } }
android6.0權限管理工具EasyPermissionUtil 前言 android6.0開始,權限的申請發生了改變,申請變的動態化,也就是運行時權限,和iOS相仿
Android幾種常見的多渠道(批量)打包方式介紹 多渠道打包,主要是為了統計不同的渠道上包的下載數量,渠道越多,我們需要打的包數量越多,這個時候,我們沒法去使用單純
Android自動化構建之Ant多渠道打包實踐分析(下) 前言 上一篇(Android自動化構建之Ant多渠道打包實踐分析(上))已經介紹了Android的apk是如何構
Android 不一樣的原生分享,android分享Android做分享功能百度一下就兩種方案,其一是用系統原生的Activity,最終彈出一個對話框,下面這種的還好,像