2012-02-01 137 views
0

可能重複:
Android SMS Receiver not working短信廣播接收器不登記

我在一個簡單的應用程序的開始階段,從一個特定的號碼攔截短信。在這一點上,我試圖實現的是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接收器的服務解決它。謝謝。

+0

爲什麼你正在檢查intent.getAction()。equals(SMS_RECEIVED)如果你已經過濾它的清單? – savionok 2012-02-01 23:39:53

+0

,因爲我正在嘗試我能想到的一切,只是爲了得到一些迴應。 – r2DoesInc 2012-02-01 23:55:27

+0

您是否嘗試過清單不過濾接收器。並通過捕獲所有電話廣播事件進行測試,例如: savionok 2012-02-02 00:08:26

回答

1

您的解決方案存在缺陷。它適用於Android 3.0及更高版本。對於Android 3.1,您必須至少有一次用戶啓動的活動才能啓用您的應用。

+0

BOOT_COMPLETED意圖啓動它。我在4.0.3上,並按照預期工作,啓動服務,並且沒有任何活動正在啓動 – r2DoesInc 2012-02-02 00:18:46

+0

@ r2DoesInc:嘗試完全卸載應用程序,然後重新安裝它。我懷疑你會發現你的'BOOT_COMPLETED'接收器不再有效。 – CommonsWare 2012-02-02 00:25:28

+0

那是一個相當痛苦。你的正確。有沒有解決的辦法?我正在開發的應用程序預裝在設備上。沒有與之相關的活動,它所做的只是攔截特定的消息並對它們做出反應。 Theres得到一個方法,我會想象? – r2DoesInc 2012-02-02 00:32:04

相關問題