Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> [android] 手機衛士黑名單功能(短信攔截),android衛士

[android] 手機衛士黑名單功能(短信攔截),android衛士

編輯:關於android開發

[android] 手機衛士黑名單功能(短信攔截),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;
    }
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved