源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

android短信拦截的实现代码

  • 时间:2020-10-18 09:14 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:android短信拦截的实现代码
短信拦截的实现主要是使用了广播接收者来实现。 BroadcastReceiver  广播接收者   必须指定要接收的广播类型。必须明确的指定action   广播:事件。 普通广播: 是异步的。会广播接收者同时接收,不能被中断 sendBroadcast() 有序广播: 是同步的。会根据广播接收的优先级进行接收,是可以中断   短信到来广播 sendOrderBroadcast() priority的范围是:-1000 ~ 1000 如果有序广播明确的指定了广播接收者,他是无法被中断的。 代码实现如下: 1、MainActivity
[u]复制代码[/u] 代码如下:
package com.njupt.t4;  import android.os.Bundle;  import android.app.Activity;  import android.content.IntentFilter;  import android.view.Menu;  public class MainActivity extends Activity {      private SmsReceiver receiver = new SmsReceiver();      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          IntentFilter filter = new IntentFilter();          filter.setPriority(997);          filter.addAction("android.provider.Telephony.SMS_RECEIVED");          registerReceiver(receiver,filter);      }      @Override      public boolean onCreateOptionsMenu(Menu menu) {          // Inflate the menu; this adds items to the action bar if it is present.          getMenuInflater().inflate(R.menu.main, menu);          return true;      }      @Override      protected void onDestroy() {          super.onDestroy();          unregisterReceiver(receiver);      }  } 
2、SmsReceiver
[u]复制代码[/u] 代码如下:
package com.njupt.t4;  import java.text.SimpleDateFormat;  import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.os.Bundle;  import android.telephony.SmsManager;  import android.telephony.SmsMessage;  public class SmsReceiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {          System.out.println("章泽天是我老婆,老婆我成功了....");          Bundle bundle = intent.getExtras();          Object[] objects = (Object[]) bundle.get("pdus");          for(Object obj : objects){              SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])obj);              String body = smsMessage.getDisplayMessageBody();              String address = smsMessage.getDisplayOriginatingAddress();              long date = smsMessage.getTimestampMillis();              SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");              String dateStr = format.format(date);              System.out.println(address +" 于  " + dateStr + "给你发了以下内容: " + body);              if(address.equals("5558")){                  abortBroadcast();                  SmsManager smsManager = SmsManager.getDefault();                  smsManager.sendTextMessage("5556",null,address +" 于  " + dateStr + "给你发了以下内容: " + body,null,null);              }          }      }  } 
  3、AndroidManifest.xml 需要在清单文件中注册上一下权限。(如果不注册是不会成功地拦截到短信的,在logcat中会以Warn的 级别告诉你你没有相应的权限...)
[u]复制代码[/u] 代码如下:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>     <uses-permission android:name="android.permission.SEND_SMS"/>     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 
-----------------------------------------------------其实上面就是使用了代码的方式来注册BroadcastReceiver------------- 其实还可以在AndroidManifest.xml注册receiver这个组件(但是我采用这个方式总是会出现内存泄露的错误,所以下面的代码仅供参考)
[u]复制代码[/u] 代码如下:
<receiver android:name=".SmsReceiver">              <intent-filter android:priority="1000">                  <action android:name="android.provider.Telephony.SMS_RECEIVED"/>              </intent-filter>          </receiver> 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部