編輯:關於Android編程
前段時間,因為項目的需要,使用ShareSDK的分享功能,其中包括 短信分享嗎,並且在調用系統短信分享成功後要與服務器進行交互處理(我這裡不關心,對方能否收到,只關心發出去了)。但是ShareSDk並不支持短信分享的回調功能,咨詢了技術客服,也沒有討論出解決方案來。於是自己嘗試粗略實現了一下。
在調用系統短信發送後,通過內容觀察者監聽 短信發件箱的改變,如果監聽到有內容改變的短信ID,那麼獲取當前的內容並檢測其中是否含有某些關鍵字( 當然,這個關鍵字是我們自己定義的,例如:“jarlen”);如果找到則說明已發送了(我這裡不關心,對方能否收到)。
/**
* 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;
}
前言本篇博客紀錄使用Android Studio對項目進行簽名打包,跟Eclipse大同小異,讀者朋友注意其中到差別。第一步 創建簽名文件第二步 填寫簽名參數第三步 選擇
Android版本升級到6.0之後,為了一改往日安全受人诟病的形象,將權限授權的安裝時授予的基礎上,對於一部分危險的權限采用動態控制授權的方式。類似國內手機安全助手權限控
layout_height的作用:首先按照聲明的尺寸分配,剩余的空間再按照layout_weight進行分配一平均分配:代碼:<code class="h
本文實例講述了Android編程實現仿美團或淘寶的多級分類菜單效果。分享給大家供大家參考,具體如下:這裡要實現的是諸如美團/淘寶/百度糯米 多級分類菜單效果。當分類數量非