摘要:[Android] 接收SMS(簡訊)
Android中可以利用BroadcastReceiver來監聽是否收到簡訊,像是Line之類的利用簡訊來認證手輸入的手機號碼是否正確。接收的方式很簡單,首先AndroidManifest.xml要定義權限:
1 |
< uses-permission android:name = "android.permission.RECEIVE_SMS" /> |
然後在Application中註冊Receiver:
1 |
< receiver |
2 |
android:name = ".SMSReceiver" |
3 |
android:enabled = "true" > |
4 |
< intent-filter > |
5 |
< action android:name = "android.provider.Telephony.SMS_RECEIVED" /> |
6 |
</ intent-filter > |
7 |
</ receiver > |
接下來是Receiver的程式碼:
01 |
import android.content.BroadcastReceiver; |
02 |
import android.content.Context; |
03 |
import android.content.Intent; |
04 |
import android.os.Bundle; |
05 |
import android.telephony.SmsMessage; |
06 |
07 |
public class SMSReceiver extends BroadcastReceiver{ |
08 |
09 |
private static final String queryString = "xxxx:" ; |
10 |
11 |
@Override |
12 |
public void onReceive(Context context, Intent intent) { |
13 |
Bundle bundle = intent.getExtras(); |
14 |
if (bundle == null ) |
15 |
return ; |
16 |
17 |
Object[] pdus = (Object[]) bundle.get( "pdus" ); |
18 |
19 |
for ( int i = 0 ; i < pdus.length; i++) { |
20 |
SmsMessage message = SmsMessage.createFromPdu(( byte []) pdus[i]); |
21 |
String fromAddress = message.getOriginatingAddress(); |
22 |
23 |
String msg = message.getMessageBody(); |
24 |
if (msg.startsWith(queryString)) { //如果是接到要處理的簡訊 |
25 |
abortBroadcast(); //停止發送廣播給其它app |
26 |
} |
27 |
|
28 |
} |
29 |
|
30 |
} |
31 |
32 |
} |
當然,一般來說不會一直開著監聽,所以我預設都是把它關掉(從AndroidManifest.xml設定android:enable為false),然後再利用啟動服務的的方式打開,收到要的之後再關掉。
1 |
// 開啟監聽 |
2 |
final PackageManager pm = this .getPackageManager(); |
3 |
final ComponentName componentName = new ComponentName( this , SMSReceiver. class ); |
4 |
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); |
引用:http://www.dotblogs.com.tw/alonstar/archive/2012/12/26/android_sms.aspx
寫文章並不為了什麼,只是撰寫文章的過程中,可以使我的去思考更多層面的東西,寫的過程中也可以再次回味學習到的東西,並深刻的印象在腦中。
當你還在找這些資訊學習時,我想安逸的生活還不適合你,一起努力吧。