我在一個簡單的應用程序的開始階段,從一個特定的號碼攔截短信。在這一點上,我試圖實現的是onReceive方法被解僱時的敬酒,但是我沒有得到任何東西。
清單
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.*****"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
</manifest>
和接收器
public class Receiver extends BroadcastReceiver {
private static final String SENDER = "****";
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received!", Toast.LENGTH_LONG).show();
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
if (messages.length > -1) {
Toast.makeText(context, "Received a message!", Toast.LENGTH_LONG).show();
//abortBroadcast();
}
}
}
}
}
更新1 創建活動,並啓動應用程序後,接收器註冊。我需要一種方法讓接收器自動註冊。沒有活動的應用程序,只是onReceive方法攔截消息。這可能嗎?也許使用啓動完整的意圖?
更新2 使用接收器,用於BOOT_COMPLETED開始其註冊的SMS接收器的服務解決它。謝謝。
爲什麼你正在檢查intent.getAction()。equals(SMS_RECEIVED)如果你已經過濾它的清單? – savionok 2012-02-01 23:39:53
,因爲我正在嘗試我能想到的一切,只是爲了得到一些迴應。 – r2DoesInc 2012-02-01 23:55:27
您是否嘗試過清單不過濾接收器。並通過捕獲所有電話廣播事件進行測試,例如: –
savionok
2012-02-02 00:08:26