--------- 調出系統發短信界面不需要權限,下面代碼即可實現
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"));
intent.putExtra("sms_body", "123");
startActivity(intent);
-------- 利用內容觀察者ContentObserver監聽短信發送,也不需要權限的
/**
* 註冊短信觀察者,實現短信發送成功的回調
*/
private void registerContentObserver() {
Uri uri = Uri.parse("content://sms/");
mContentObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
long endTimeOfShare2Msg = System.currentTimeMillis();
long dt = endTimeOfShare2Msg - mStartTimeOfShare2Msg;
if ((mStartTimeOfShare2MsgTemp != mStartTimeOfShare2Msg) && dt <= 20000) {//用戶觸發短信分享動作並在20s內有短信發出,就認定是短信發送成功。
L.i(TAG, "短信分享成功");
ShareUtil.getInstance().share2MessageSuccess();
mStartTimeOfShare2MsgTemp = mStartTimeOfShare2Msg;
}
}
};
getContentResolver().registerContentObserver(uri, true, mContentObserver);
}
短信在規定時間內發出,觀察者會調用4次onChange方法,爲了過濾掉其他3次,採取過濾掉後3次,以第1次爲有效,
採取的方法是用一個臨時變量存儲發送短信開始的時間,再用該臨時變量和開始的時間比較即可。
---------------- 退出Activity時記得註銷短信觀察者
//註銷短信觀察者
getContentResolver().unregisterContentObserver(mContentObserver);