2014-08-29 71 views
1

我試圖設置一個接收短信和發送狀態的類。 這是我的清單看起來如何完成這個任務:在一個BroadcastReceiver中接收和發送短信(Android)

 <receiver android:name=".SmsListener" android:permission="android.permission.BROADCAST_SMS" android:exported="true"> 
      <intent-filter android:priority="5822"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       <action android:name="android.provider.Telephony.SMS_SENT" /> 
      </intent-filter> 
     </receiver> 

我得到接收的消息,但沒有得到發送的消息,是有毛病我艙單申報?

 PendingIntent _pendingIntent; 
     Intent _intent = new Intent(); 
     _intent.setClass(ParkingOptionsActivity.this, SmsListener.class); // SmsListener extends BroadcastReceiver 
     _intent.putExtra("test","test"); 
     _pendingIntent = PendingIntent.getActivity(ParkingOptionsActivity.this, 0, _intent, 0); 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, "test message", _pendingIntent, null); 

回答

3

您需要getBroadcast(),而不是getActivity()獲取您PendingIntent,因爲要廣播發送到您的BroadcastReceiver,不啓動Activity

在你現在的代碼,你可以簡單地更改一行:

_pendingIntent = PendingIntent.getBroadcast(ParkingOptionsActivity.this, 0, _intent, 0); 

此外,"android.provider.Telephony.SMS_SENT"動作沒有出現在目前的SDK,並有當短信發送沒有系統廣播。由於Intent明確地指向您的Receiver類,因此您的應用並非真的需要清單條目中的<action>

如果你打算使用別的東西,動作 - 例如,在onReceive()區分廣播,從其他應用程序接收隱含廣播等等 - 那麼你可以考慮將其更改爲使用除android.provider.Telephony包名以外的東西,所以因爲未來不會造成潛在的不良行爲或混亂。我會說,使用你自己的應用程序的包名是常態。