Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 基於android 社區app短信分享 發送回調事件實現

基於android 社區app短信分享 發送回調事件實現

編輯:關於Android編程

概要

前段時間,因為項目的需要,使用ShareSDK的分享功能,其中包括 短信分享嗎,並且在調用系統短信分享成功後要與服務器進行交互處理(我這裡不關心,對方能否收到,只關心發出去了)。但是ShareSDk並不支持短信分享的回調功能,咨詢了技術客服,也沒有討論出解決方案來。於是自己嘗試粗略實現了一下。

方法

在調用系統短信發送後,通過內容觀察者監聽 短信發件箱的改變,如果監聽到有內容改變的短信ID,那麼獲取當前的內容並檢測其中是否含有某些關鍵字( 當然,這個關鍵字是我們自己定義的,例如:“jarlen”);如果找到則說明已發送了(我這裡不關心,對方能否收到)。

核心 Code


/**
 * Created by jarlen on 2015/6/4.
 */
public class SMSContentObserver extends ContentObserver {
    private Context mContext;

    private boolean isGoing = false;
    private Handler mHandler;
    private String targetAddress = null;
    private String observerContent = null;

    /**
     * 短信息發送監聽者構造器
     *
     * @param context
     * @param handler 監聽回調
     * @param address 監聽的目標手機號
     * @param content 監聽的內容關鍵字
     */
    public SMSContentObserver(Context context, Handler handler, String address, String content) {
        super(handler);
        this.mContext = context;
        this.mHandler = handler;
        if (address != null) {
            //去掉手機號中的全部空格
            this.targetAddress = address.replaceAll(" ", "");
        }
        this.observerContent = content;
    }

    Object obj = new Object();

    @Override
    public void onChange(boolean selfChange) {

        synchronized (obj) {
            if (!isGoing) {
                isGoing = true;
                Cursor cursor = mContext.getContentResolver().query(
                        Uri.parse("content://sms/outbox"), null, null, null,
                        null);

                String address = null;
                String smsContent = null;
                // 遍歷查詢結果獲取用戶正在發送的短信
                while (cursor.moveToNext()) {
                    StringBuffer sb = new StringBuffer();
                    // 獲取短信的發送地址
                    address = cursor
                            .getString(cursor.getColumnIndex("address"));
                    smsContent = cursor
                            .getString(cursor.getColumnIndex("body"));
                }
                if (address != null && smsContent != null) {
                    // 找到一個正在發送的短信
                    Log.e("===", "找到一個正在發送的短信");
                    if (targetAddress != null) {
                        // 事先指定的收件人不為空
                        if (address.contains(targetAddress)
                                && smsContent.contains(observerContent)) {
                            // 正好是事先指定的收件人,並且信息內容含有某種關鍵字
                            Log.e("===", "信息內容含有某種關鍵字");
                            Message msg = mHandler.obtainMessage();
                            msg.obj = address;
                            msg.what = 1;
                            msg.sendToTarget();
                        } else {
                            Message msg = mHandler.obtainMessage();
                            msg.what = 0;
                            msg.sendToTarget();
                        }
                    } else {
                        // 事先沒有指定的收件人
                        if (smsContent.contains(observerContent)) {
                            // 信息內容含有某種關鍵字
                            Log.e("===", "信息內容含有某種關鍵字");
                            Message msg = mHandler.obtainMessage();
                            msg.obj = address;
                            msg.what = 1;
                            msg.sendToTarget();
                        } else {
                            Message msg = mHandler.obtainMessage();
                            msg.what = 0;
                            msg.sendToTarget();
                        }
                    }
                }
            }
        }
    }
}

創建監聽


    /**
     * 監聽
     */
    private SMSContentObserver smsContentObserver;

    private boolean smsContentObserverFind = false;

    private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {

            if (msg.what == 1 && !smsContentObserverFind) {

                ........// 相關處理

                smsContentObserverFind = true;
            }
        }
    };
smsContentObserver = new SMSContentObserver(this, mHandler, usernumber,"某關鍵詞");

getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true, smsContentObserver);

/**
*監聽解綁
*/
if (smsContentObserver != null) {
            getContentResolver().unregisterContentObserver(smsContentObserver);
            smsContentObserver = null;
        }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved