2012-10-15 53 views
2

即使Log.d未被調用。找不到錯誤。我看過Android - SMS Broadcast receiver,Android – Listen For Incoming SMS Messages。我一直在尋找過去24小時左右的解決方案。請看看並告訴我錯在哪裏。Android短信廣播監聽器不工作

不引發任何異常。 SmsListener位於我的包文件夾中,其中放置了所有其他活動。

更新增加了android:enabled="true"到接收器。然後也沒有工作。

我有我的清單:

<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

<receiver android:name=".SmsListener" android:exported="false"> 
    <intent-filter android:priority="2147483647"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

SmsListener.Java代碼:

public class SmsListener extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    Log.d(MainActivity.TAG, 
      "in Receiver. intent.getAction():" + intent.getAction()); 

    if (intent.getAction() 
      .equals("android.provider.Telephony.SMS_RECEIVED")) { 
     Bundle bundle = intent.getExtras(); // ---get the SMS message passed 
              // in--- 
     SmsMessage[] msgs = null; 
     String msg_from; 
     if (bundle != null) { 
      // ---retrieve the SMS message received--- 
      try { 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       msgs = new SmsMessage[pdus.length]; 
       for (int i = 0; i < msgs.length; i++) { 
        msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        msg_from = msgs[i].getOriginatingAddress(); 
        String msgBody = msgs[i].getMessageBody(); 
        NotifyMe(context, msg_from, msgBody); 
       } 
      } catch (Exception e) { 
       // Log.d("Exception caught",e.getMessage()); 
      } 
     } 
    } 
} 
private void NotifyMe(Context context, String msg_from, String msgBody) { 
    // do something 
} 
} 
+0

你試過將android:優先級設置爲1000嗎? – fycth

+0

立即嘗試。我認爲分配最高的整數值會做。 – harshit

+0

@Andrey無法正常工作 – harshit

回答

5

現在的問題就解決了。清單中的修改過的接收器

<receiver android:name=".SmsListener" > 
     <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
</receiver> 

它適用於我。希望有人從中受益。感謝大家的幫助。

+0

我的優先級爲1000.將其更改爲999.此工作正常。不知道爲什麼,但工作 –

0

你有你的清單android.permission.RECEIVE_SMS此權限嗎?

這是基本的,但只要確保

3

您是否嘗試通過代碼註冊接收方?下面是例子,我是如何在我的一個項目中做到這一點的 - 它正在處理我的案子。

短信接收器類

public class SMSReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Object[] pduArray = (Object[]) intent.getExtras().get("pdus"); 
     SmsMessage[] messages = new SmsMessage[pduArray.length]; 
     for (int i = 0; i < pduArray.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]); 

     String SideNumber = messages[0].getDisplayOriginatingAddress(); 
     long Timestamp = messages[0].getTimestampMillis(); 

     StringBuilder bt = new StringBuilder(); 
     for (SmsMessage message : messages) bt.append(message.getMessageBody()); 

     String Smsbody = bt.toString(); 
    } 
} 

服務類 - 它註冊廣播接收器這只是舉例,您可以在活動註冊廣播接收器。 AndroidManifest.xml中的

public class AService extends Service 
{ 
    private SMSReceiver smsReceiver; 
    final IntentFilter smsFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 

    @Override 
    public void onCreate() 
    { 
    smsFilter.setPriority(1000); 
    this.smsReceiver = new SMSReceiver(); 
    this.registerReceiver(this.smsReceiver, smsFilter); 
    } 
} 

部分

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 

<service android:name=".AService" android:exported="false"/> 
+0

它的工作原理。但是,我仍然不清楚我在清單文件中出錯的地方。另外,我通過我的mainActivity(這是第一個顯示的)註冊它,在關閉活動之後,當應用程序完全關閉時,它不再監聽此廣播。 – harshit

+0

@harshit如果您在活動結束後需要它工作,則可以使用服務 – fycth