2015-05-07 3 views
2

Я хочу обрабатывать полученные SMS с помощью BroadcastReceiver. Если появятся новые sms, будет показана новая активность. Это мое усилие:Не удается обработать полученные SMS

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 

     StringBuilder sb = new StringBuilder(); 
     if (bundle != null) {   
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      for (int i = 0; i < pdus.length; i++) { 
       //yes, I need PDU 
       sb.append(pdus[i]); 
      } 
     } 

     Intent result = new Intent(context, MainActivity.class); 
     result.putExtra(Mapping.PDU_TEXT, sb.toString()); 
     result.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(result); 

    } 

И активность:

public class MainActivity extends Activity { 

    private TextView mPDUTextView; 

    private String pduText; 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     super.onSaveInstanceState(savedInstanceState); 

     savedInstanceState.putString(Mapping.PDU_TEXT, pduText); 

    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     pduText = savedInstanceState.getString(Mapping.PDU_TEXT); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if (savedInstanceState == null) { 
      if (getIntent().getExtras() != null) { 
       pduText = this.getIntent().getExtras() 
         .getString(Mapping.PDU_TEXT); 
      } 
     } 
     mPDUTextView = (TextView) this.findViewById(R.id.pduTextView); 
     mPDUTextView.setText(pduText); 
    } 

} 

Также обратите внимание на манифесте:

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <receiver android:name="ru.tenet.pdureceiver.SMSReceiver" > 
      <intent-filter>    
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
       <data android:scheme="sms" /> 
       <data android:port="8998" /> 
      </intent-filter> 
     </receiver> 


     <activity 
      android:name="ru.tenet.pdureceiver.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

Я установил мое приложение на реальном устройстве. Если я отправлю сообщение, никаких действий не будет. Что не так?

+0

доводчики, не могли бы вы объяснить, почему? – Tony

ответ

2

Просто попробуйте вместо этого:

<intent-filter android:priority="1" > 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
</intent-filter> 
Смежные вопросы