您的位置:首页 > 其它

day5.10总结_短信和电话拦截

2016-05-16 22:57 288 查看

短信和电话拦截

public class MainActivity extends Activity {

         EditText et;

         DBUtil util;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                  super.onCreate(savedInstanceState);

                  setContentView(R.layout.activity_main);

                  et=(EditText) findViewById(R.id.editText1);

                  util=new DBUtil(this);

         }

         public void add(View v){

                  String number = et.getText().toString();

                  if(TextUtils.isEmpty(number)){

                           return;

                  }

                  util.addBlck(number);

         }

         public void start(View v){

                  Intent intent = new Intent(this,MyService.class);

                  startService(intent);

         }

         public void stop(View v){

                  Intent intent = new Intent(this,MyService.class);

                  stopService(intent);

         }

}

public class MyService extends Service {

        

         DBUtil dbUtil;

         MyReceive receive;

         ITelephony telephony;

         TelephonyManager manager;

         public MyService() {}

 

         @Override

         public void onCreate() {

                  Log.i("tag", "服务创建了!");

                  dbUtil = new DBUtil(this);

                  manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);

                  try {

                  Method method = manager.getClass().getDeclaredMethod("getITelephony", null);

                           method.setAccessible(true);   
反射调用方法


                           telephony = (ITelephony) method.invoke(manager, null);

                  } catch (Exception e) {

                           e.printStackTrace();

                  }       

                  IntentFilter filter = new IntentFilter();

                  filter.addAction("android.provider.Telephony.SMS_RECEIVED");接受短信

                  filter.addAction("android.intent.action.NEW_OUTGOING_CALL");呼出电话

                  filter.addAction("android.intent.action.PHONE_STATE");来电的状态

                  filter.setPriority(999);

                  receive=new MyReceive();

                  registerReceiver(receive, filter);

                  super.onCreate();

         }

        

         @Override

         public void onDestroy() {

                  Log.i("tag", "服务销毁了!");

                  unregisterReceiver(receive);

                  super.onDestroy();

         }

         @Override

         public IBinder onBind(Intent intent) {

                 

                  throw new UnsupportedOperationException("Not yet implemented");

         }

        

         @Override

         public int onStartCommand(Intent intent, int flags, int startId) {

                  return Service.START_FLAG_REDELIVERY;

         }

        

         public class MyReceive extends BroadcastReceiver{

 

                  @Override

                  public void onReceive(final Context context, Intent intent) {

                           String action =intent.getAction();

                           if("android.provider.Telephony.SMS_RECEIVED".equals(action)){

                                    String number = dbUtil.getNumberFromSMS(intent.getExtras());

                                    Log.i("tag", "短信发送人:"+number);

                                    if(dbUtil.isBlackNumber(number)){

                                             abortBroadcast();

                                             Toast.makeText(MyService.this, "短信已被拦截!", 1);

                                             dbUtil.saveBlackSms(intent.getExtras());

                                    }

                           }

                          

                           if("android.intent.action.NEW_OUTGOING_CALL".equals(action)){

                                    String number = getResultData();

                                    if(dbUtil.isBlackNumber(number)){

                                             setResultData(null);   
设置电话号码为空


                                             Toast.makeText(MyService.this, "电话已被拦截!", 1);

                                             dbUtil.saveBlackPhone(number,1);

                                    }

                           }

                          

                           if("android.intent.action.PHONE_STATE".equals(action)){

                                    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

                                    if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){

                                             final String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

                                             if(dbUtil.isBlackNumber(number)){

                                                      try {

                                                               telephony.endCall();

                                                      } catch (RemoteException e) {

                                                               e.printStackTrace();

                                                      }

                                                      dbUtil.saveBlackPhone(number,2);

                                                      new Handler().postDelayed(new Runnable() {

                                                              

                                                               @Override

                                                               public void run() {

                                                                       
dbUtil.removeCalllog(context,number);


                                                               } 
延迟删除,以防通话记录还没插入数据库就被删除


                                                      }, 3000);

                                             }

                                    }

                           }

                  }

         }

}

 

ba16

public class DBUtil {

 

         private Context context;

         private DBHelper dbHelper;

        

         public DBUtil(Context context){

                  this.context=context;

                  dbHelper=DBHelper.getInstance(context);

         }

        

         public void addBlck(String number){

                  SQLiteDatabase db = dbHelper.getWritableDatabase();

                  ContentValues values =new ContentValues();

                  values.put("number", number);

                  db.insert("tb_blacklist", "null", values );

                  Toast.makeText(context, "数据添加成功!", 1).show();;

         }

 

         public String getNumberFromSMS(Bundle extras) {

                  Object[] pdus = (Object[]) extras.get("pdus");

                  String number ="";

                  for (int i = 0; i < pdus.length; i++) {

                           SmsMessage message =SmsMessage.createFromPdu((byte[]) pdus[i]);

                           number= message.getDisplayOriginatingAddress();

                  }

                  return number;

         }

 

         public boolean isBlackNumber(String number) {

                  boolean result = false;

                  SQLiteDatabase db = dbHelper.getReadableDatabase();

Cursor cursor = db.query("tb_blacklist", null, "number=?", new String[]{number}, null, null, null);

                  if(cursor.moveToNext()){

                           result= true;

                  }

                  cursor.close();

                  return result;

         }

 

         public void saveBlackSms(Bundle extras) {

                  String number = getNumberFromSMS(extras);

                  StringBuilder sb = new StringBuilder();

                  Object[] pdus = (Object[]) extras.get("pdus");

                  for (int i = 0; i < pdus.length; i++) {

                           SmsMessage message =SmsMessage.createFromPdu((byte[]) pdus[i]);

                           sb.append(message.getDisplayMessageBody());

                  }

                  SQLiteDatabase db = dbHelper.getWritableDatabase();

                  ContentValues values =new ContentValues();

                  values.put("number", number);

                  values.put("body", sb.toString());

                  values.put("date", System.currentTimeMillis());

                  db.insert("tb_blcksms", null, values );

         }

 

         public void saveBlackPhone(String number, int type) {

                  SQLiteDatabase db = dbHelper.getWritableDatabase();

                  ContentValues values =new ContentValues();

                  values.put("number", number);

                  values.put("type", type);

                  values.put("date", System.currentTimeMillis());

                  db.insert("tb_blckphone", null, values);

         }

 

         public void removeCalllog(Context context2, String number) {

                  ContentResolver cr = context.getContentResolver();            

                  cr.delete(CallLog.Calls.CONTENT_URI, CallLog.Calls.NUMBER+"=?", new String[]{number});

         }

}

public class DBHelper extends SQLiteOpenHelper {

 

         private static DBHelper instance;

         public static  DBHelper getInstance(Context context){

                  if(instance==null){

                           synchronized (DBHelper.class){   
创建单例并且同步


                                    if(instance==null){

                                             instance=new DBHelper(context);

                                    }

                           }

                  }

                  return instance;

         }

 

         public DBHelper(Context context) {

                  super(context, "black.db", null, 1);

         }

         @Override

         public void onCreate(SQLiteDatabase db) {

                  String sql1= "create table if not exists tb_blacklist(_id integer primary key autoincrement,"

                                    + "number text not null)";

                  db.execSQL(sql1);

 

                  String sql2="create table if not exists tb_blcksms(_id integer primary key autoincrement,"

                                    + "date integer not null,"

                                    + "body text not null,"

                                    + "number text not null)";

                  db.execSQL(sql2);

 

                  String sql3="create table if not exists tb_blckphone(_id integer primary key autoincrement,"

                                    + "date integer not null,"

                                    + "number text not null,"

                                    + "type integer not null)";

                  db.execSQL(sql3);

         }

         @Override

         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

         }

}

ITelephony.aidl

package com.android.internal.telephony;     
远程调用系统的电话的方法


interface ITelephony{

         boolean endCall();

         void answerRingingCall();

}

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: