1、监听广播
缺点,因为优先级的原因可能接收不到。
代码:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
public static final String TAG = "ImiChatSMSReceiver" ;
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED" ;
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(SMS_RECEIVED_ACTION))
{
SmsMessage[] messages = getMessagesFromIntent(intent);
for (SmsMessage message : messages)
{
String text = message.getOriginatingAddress() + " : " +
message.getDisplayOriginatingAddress() + " : " +
message.getDisplayMessageBody() + " : " +
message.getTimestampMillis();
String num = message.getOriginatingAddress();
Log.i(TAG, "-------------" + text);
Toast.makeText(context, text, Toast.LENGTH_LONG).show();
context.getContentResolver().registerContentObserver(Uri.parse( "content://sms/" ), true , new SmsObserver( new Handler(), context));
}
}
}
public void sendMessage(String num, String text, Context context)
{
SmsManager smsManager = SmsManager.getDefault();
PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0 , new Intent(), 0 );
String strContent = text;
smsManager.sendTextMessage(num, null , strContent, sentIntent, null );
TelephonyManager tl = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int itype = tl.getPhoneType();
Log.i(TAG, "-------------" + "当前卡类型为:" + itype);
if (itype == TelephonyManager.PHONE_TYPE_GSM)
{
Toast.makeText(context, "当前卡类型为:GSM" , Toast.LENGTH_LONG).show();
}
else if (itype == TelephonyManager.PHONE_TYPE_CDMA)
{
Toast.makeText(context, "当前卡类型为 : CDMA" , Toast.LENGTH_LONG).show();
}
else if (itype == TelephonyManager.PHONE_TYPE_NONE)
{
Toast.makeText(context, "当前卡类型为:NONE" , Toast.LENGTH_LONG).show();
}
}
public final SmsMessage[] getMessagesFromIntent(Intent intent)
{
Object[] messages = (Object[]) intent.getSerializableExtra( "pdus" );
byte [][] pduObjs = new byte [messages.length][];
for ( int i = 0 ; i < messages.length; i++)
{
pduObjs[i] = ( byte []) messages[i];
}
byte [][] pdus = new byte [pduObjs.length][];
int pduCount = pdus.length;
SmsMessage[] msgs = new SmsMessage[pduCount];
for ( int i = 0 ; i < pduCount; i++)
{
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}
|
2、采用观察方法,监听短信数据库
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
|
public class SmsObserver extends ContentObserver
{
private Context mContext;
public SmsObserver(Handler handler , Context context)
{
super (handler);
mContext = context;
}
public void onChange( boolean selfChange)
{
super .onChange(selfChange);
Cursor cursor = null ;
try
{
//读取收件箱中的短信
cursor = mContext.getContentResolver().query(Uri.parse( "content://sms/inbox" ), null , null , null , "date desc" );
String body;
boolean hasDone = false ;
if (cursor != null )
{
while (cursor.moveToNext())
{
body = cursor.getString(cursor.getColumnIndex( "body" ));
if (body != null ) //&& body.equals("【startMyActivity】"
{
hasDone = true ;
break ;
}
if (hasDone)
{
break ;
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (cursor!= null ) cursor.close();
}
}
}
|
用到的权限:
1
2
3
|
< uses-permission android:name = "android.permission.SEND_SMS" />
< uses-permission android:name = "android.permission.RECEIVE_SMS" />
< uses-permission android:name = "android.permission.READ_SMS" />
|