首页 > 系统 > Android > 正文

Android开发获取短信的内容并截取短信

2020-04-11 11:08:22
字体:
来源:转载
供稿:网友

1、首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了

2、在广播里面,我们重写的onReceive()方法,通过里面的Intent写到的Bundle就可以拿到短信的内容,

3、清单文件里面我们必须要添加权限,否则无法接收到。

4、为了防止我们的广播接收不到,我们自己写的广播接收器的权限必须要大,以防万一,我设置了1000。

下面上代码,里面的注释也比较详细..

 <?xml version="." encoding="utf-"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="com.example.fanlei.cutnotedemo" >   //接收短信   <uses-permission android:name="android.permission.RECEIVE_SMS"/>   <application     android:allowBackup="true"     android:icon="@drawable/ic_launcher"     android:label="@string/app_name"     android:theme="@style/AppTheme" >     <!-- action:name = 的名称是固定的 -->     <receiver android:name=".NoteReceiver">       <intent-filter android:priority="">         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>       </intent-filter>     </receiver>     <activity       android:name=".MainActivity"       android:label="@string/app_name" >       <intent-filter>         <action android:name="android.intent.action.MAIN" />         <category android:name="android.intent.category.LAUNCHER" />       </intent-filter>     </activity>   </application> </manifest>

写一个类,继承BroadcastReceiver

Android--获取短信的内容,截取短信 package com.example.fanlei.cutnotedemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; /** * 广播接收器 */ public class NoteReceiver extends BroadcastReceiver {   private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";   @Override   public void onReceive(Context context, Intent intent) {     String action = intent.getAction();     //判断广播消息     if (action.equals(SMS_RECEIVED_ACTION)){       Bundle bundle = intent.getExtras();       //如果不为空       if (bundle != null){         //将pdus里面的内容转化成Object[]数组         Object pdusData[] = (Object[]) bundle.get("pdus");         //解析短信         SmsMessage[] msg = new SmsMessage[pdusData.length];         for (int i = ;i < msg.length;i++){           byte pdus[] = (byte[]) pdusData[i];           msg[i] = SmsMessage.createFromPdu(pdus);         }         StringBuffer content = new StringBuffer();//获取短信内容         StringBuffer phoneNumber = new StringBuffer();//获取地址         StringBuffer receiveData = new StringBuffer();//获取时间         //分析短信具体参数         for (SmsMessage temp : msg){           content.append(temp.getMessageBody());           phoneNumber.append(temp.getOriginatingAddress());           receiveData.append(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")               .format(new Date(temp.getTimestampMillis())));         }         /**         * 这里还可以进行好多操作,比如我们根据手机号进行拦截(取消广播继续传播)等等         */         Toast.makeText(context,phoneNumber.toString()+content+receiveData, Toast.LENGTH_LONG).show();//短信内容       }     }   } }

ps:android获取短信所有内容

public class GetMessageInfo {   List<MessageInfo> list;   Context context;   MessageInfo messageInfo;   public GetMessageInfo(Context context) {     list = new ArrayList<MessageInfo>();     this.context = context;   }   // --------------------------------收到的短息信息----------------------------------   public List<MessageInfo> getSmsInfos() {     final String SMS_URI_INBOX = "content://sms/inbox";// 收信箱     try {       ContentResolver cr = context.getContentResolver();       String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };       Uri uri = Uri.parse(SMS_URI_INBOX);       Cursor cursor = cr.query(uri, projection, null, null, "date desc");       while (cursor.moveToNext()) {         messageInfo = new MessageInfo();         // -----------------------信息----------------         int nameColumn = cursor.getColumnIndex("person");// 联系人姓名列表序号         int phoneNumberColumn = cursor.getColumnIndex("address");// 手机号         int smsbodyColumn = cursor.getColumnIndex("body");// 短信内容         int dateColumn = cursor.getColumnIndex("date");// 日期         int typeColumn = cursor.getColumnIndex("type");// 收发类型 1表示接受 2表示发送         String nameId = cursor.getString(nameColumn);         String phoneNumber = cursor.getString(phoneNumberColumn);         String smsbody = cursor.getString(smsbodyColumn);         Date d = new Date(Long.parseLong(cursor.getString(dateColumn)));         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd " + "/n" + "hh:mm:ss");         String date = dateFormat.format(d);         // --------------------------匹配联系人名字--------------------------         Uri personUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,phoneNumber);         Cursor localCursor = cr.query(personUri, new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID,PhoneLookup._ID }, null, null, null);         System.out.println(localCursor.getCount());         System.out.println("之前----"+localCursor);         if (localCursor.getCount()!=0) {           localCursor.moveToFirst();           System.out.println("之后----"+localCursor);           String name = localCursor.getString(localCursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));           long photoid = localCursor.getLong(localCursor.getColumnIndex(PhoneLookup.PHOTO_ID));           long contactid = localCursor.getLong(localCursor.getColumnIndex(PhoneLookup._ID));           messageInfo.setName(name);           // 如果photoid 大于0 表示联系人有头像 ,如果没有给此人设置头像则给他一个默认的           if (photoid > 0) {            Uri uri1 = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);             InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri1);             messageInfo.setContactPhoto(BitmapFactory.decodeStream(input));           } else {             messageInfo.setContactPhoto(BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher));           }         }else{             messageInfo.setName(phoneNumber);             messageInfo.setContactPhoto(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher));           }         localCursor.close();         messageInfo.setSmsContent(smsbody);         messageInfo.setSmsDate(date);         list.add(messageInfo);       }     } catch (SQLiteException e) {       e.printStackTrace();     }     return list;   } } 

以上内容是小编给大家分享的Android开发获取短信的内容并截取短信,希望大家喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表