1、首先我们要写一个广播接收器,当我们的手机收到短信时,系统会自动发送一个广播,我们只需要接收到这条广播就可以了
2、在广播里面,我们重写的onReceive()方法,通过里面的Intent写到的Bundle就可以拿到短信的内容,
3、清单文件里面我们必须要添加权限,否则无法接收到。
4、为了防止我们的广播接收不到,我们自己写的广播接收器的权限必须要大,以防万一,我设置了1000。
下面上代码,里面的注释也比较详细..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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获取短信所有内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
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开发获取短信的内容并截取短信,希望大家喜欢。