Android中監(jiān)聽短信的兩種方法
更新時間:2015年04月24日 12:03:23 投稿:junjie
這篇文章主要介紹了Android中監(jiān)聽短信的兩種方法,本文講解了監(jiān)聽廣播、采用觀察方法,監(jiān)聽短信數(shù)據(jù)庫兩種方法,需要的朋友可以參考下
1、監(jiān)聽廣播
缺點,因為優(yōu)先級的原因可能接收不到。
代碼:
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();
sendMessage(num, "來自" + num + "的短信已經(jīng)收到", context);
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、采用觀察方法,監(jiān)聽短信數(shù)據(jù)庫
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();
}
}
}
用到的權(quán)限:
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" />
相關(guān)文章
Android OnFocuChangeListener焦點事件詳解
這篇文章主要為大家詳細介紹了Android OnFocuChangeListener焦點事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
Android 監(jiān)聽WiFi的開關(guān)狀態(tài)實現(xiàn)代碼
這篇文章主要介紹了Android 監(jiān)聽WiFi的開關(guān)狀態(tài)實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android 實現(xiàn)ViewPager邊界回彈效果實例代碼
這篇文章主要介紹了Android 實現(xiàn)ViewPager邊界回彈效果的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05
Android Studio 3.0后出現(xiàn)AAPT2與“android.enableAapt2”問題的解決方法
這篇文章主要給大家介紹了關(guān)于Android Studio 3.0后出現(xiàn)AAPT2與“android.enableAapt2”問題的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07
Android實現(xiàn)Toast提示框圖文并存的方法
這篇文章主要介紹了Android實現(xiàn)Toast提示框圖文并存的方法,實例分析了Toast提示框的參數(shù)設(shè)置及圖文調(diào)用的相關(guān)技巧,需要的朋友可以參考下2016-01-01

