Android广播实现短信窃听器和开机自动启动Activity

Linux大全评论410 views阅读模式

一、短信窍听器

首先:订阅感兴趣的广播 Intent ,订阅方法有两种:
第一种:使用代码进行订阅

  1. IntentFilter filter = new IntentFilter("Android.provider.Telephony.SMS_RECEIVED");  
  2. IncomingSMSReceiver receiver = new IncomingSMSReceiver();  
  3. registerReceiver(receiver, filter);  

第二种:在 AndroidManifest.xml 文件中的 <application> 节点里进行订阅 :

  1. <receiver android:name=".IncomingSMSReceiver">  
  2. <intent-filter>  
  3. <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
  4. </intent-filter>  
  5. </receiver>  

咱用第二种:

在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候我们要干什么,这就要我们自己来实现!!

  1. public class MySMSListener extends BroadcastReceiver {  
  2.   
  3.     public void onReceive(Context arg0, Intent intent) {  
  4.           
  5.         Bundle bundle=intent.getExtras();  
  6.         Object[] pdus=(Object[])bundle.get("pdus");               
  7.         if(pdus!=null&&pdus.length>0){  
  8.             SmsMessage[] messages=new SmsMessage[pdus.length];  
  9.             for(int i=0;i<messages.length;i++){  
  10.                 byte[] pdu=(byte[]) pdus[i];  
  11.                 messages[i]=SmsMessage.createFromPdu(pdu);  
  12.             }  
  13.             for(SmsMessage msg:messages){  
  14.                 String content=msg.getMessageBody();  
  15.                 String sender=msg.getOriginatingAddress();  
  16.                 Date date=new Date(msg.getTimestampMillis());  
  17.                 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  18.                 String sendTime=sdf.format(date);  
  19.                                   
  20.                 if(sender!=null&& sender.endsWith("5556")){  
  21.                     System.out.println("5556");  
  22.                     SmsManager smsManager=SmsManager.getDefault();  
  23.                     smsManager.sendTextMessage("5556"null"go to !!"nullnull);  
  24.                     this.abortBroadcast();//终止广播   
  25.                 }  
  26.             }  
  27.         }  
  28.     }  
  29.   
  30. }  

这里需要启动两个模拟器!!

if语句判断是不是5556来的短信,如果是,终止广播,不让5556发短信到5554,并给5556发一个短信,内容为“go to!!";

在这里 , 不用理解到底什么是 pdus ,只要记住是这么用的就可以了!

  1. <receiver android:name="MySMSListener"  
  2.             >  
  3.             <intent-filter android:priority="1000">  
  4.                 <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
  5.             </intent-filter>  
  6.         </receiver>  

这个priority是定义权限,值是-1000~1000;

还要加上权限申请:

  1. <uses-permission android:name="android.permission.RECEIVE_SMS"/>  

ok!你可以贴代码试试效果!!

企鹅博客
  • 本文由 发表于 2020年7月10日 12:21:29
  • 转载请务必保留本文链接:https://www.qieseo.com/173182.html

发表评论