android服务和广播的结合使用demo
package com.example.yqqmobilesafe.service; import java.util.List; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; import android.os.IBinder; import android.telephony.SmsMessage; import android.util.Log; import com.example.yqqmobilesafe.RubishSmsActivity; import com.example.yqqmobilesafe.ContactProvider.ContactInfoProvider; import com.example.yqqmobilesafe.db.dao.RubishSmsInfoDao; import com.example.yqqmobilesafe.domain.ContactInfo; import com.example.yqqmobilesafe.domain.RubishSmsInfo; /** * 陌生短信拦截服务 * @author yqq * */ public class StopStrangerPhoneNumberSmsService extends Service { private boolean D=true; private StopStrangerSmsReceiver mReceiver;//陌生人短信拦截广播接受者 public StopStrangerPhoneNumberSmsService() { // TODO Auto-generated constructor stub } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { if(D){ Log.i("StopStrangerPhoneNumberSmsService"," onCreate()"); } //注册广播 mReceiver=new StopStrangerSmsReceiver(); IntentFilter filter=new IntentFilter(); filter.setPriority(Integer.MAX_VALUE); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(mReceiver, filter); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(D){ Log.i("StopStrangerPhoneNumberSmsService","onStartCommand"); } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { if(D){ Log.i("StopStrangerPhoneNumberSmsService","onDestroy() "); } //取消广播接收者 unregisterReceiver(mReceiver); mReceiver=null; super.onDestroy(); } //陌生人短信拦截广播接受者 class StopStrangerSmsReceiver extends BroadcastReceiver{ private String sender;//发送人号码 private String body;//短信内容 @Override public void onReceive(Context context, Intent intent) { Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj : objs ){ SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); //获得短信发送者的号码 sender = smsMessage.getOriginatingAddress(); body = smsMessage.getMessageBody(); new AsyncTask<Void,Void,Void>(){ List<ContactInfo> infos=null; @Override protected Void doInBackground(Void... params) { ContactInfoProvider contactInfoProvider=new ContactInfoProvider(getApplicationContext()); infos=contactInfoProvider.getSystemContactInfos(); return null; } @Override protected void onPostExecute(Void result) { if(infos==null){ //Toast.makeText(getApplicationContext(),, duration) return; } for(ContactInfo info:infos){ if(info.getPhoneNumber().equals(sender)){ return; } } abortBroadcast(); new AsyncTask<Void,Void,Void>(){ @Override protected Void doInBackground( Void... params) { RubishSmsInfo sms=new RubishSmsInfo(); sms.setPhoneNumber(sender); sms.setSmsContent(body); //把陌生人短信存储在数据库表里 RubishSmsInfoDao rubishSmsInfoDao=new RubishSmsInfoDao(getApplicationContext()); rubishSmsInfoDao.addSmsInfos(sms); return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent intent=new Intent(StopStrangerPhoneNumberSmsService.this,RubishSmsActivity.class); PendingIntent pi=PendingIntent.getActivity(StopStrangerPhoneNumberSmsService.this, 0, intent, 0); //发一个拦截通知 Notification notification=new Notification.Builder(getApplicationContext()) .setAutoCancel(true) .setTicker("拦截到陌生短信") .setSmallIcon(com.example.yqqmobilesafe.R.drawable.notif_icon_sms) .setContentText("拦截到陌生短信") .setContentIntent(pi) .build(); nm.notify(100,notification); } }.execute(); super.onPostExecute(result); } }.execute(); } } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。