Проблема есть в вашем манифесте, вы закрываете тег <application>
перед тегом получателя, и это неправильно.Все компоненты должны быть внутри тега приложения.
Ваше имя класса - SmsReceiver, и в манифесте вы объявлены как SMSReceiver, поэтому вы вообще не получите широковещательную рассылку для своего получателя.
Использованиенеобходимо изменить имя вашего класса в манифесте, как показано ниже
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="99999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
И в вашем получателе лучше проверить объект намерения на предмет того, получили вы сообщение или нет, и затем вы можете прервать его.
Но будьте осторожны, это прервет все сообщения.Если вы хотите прервать сообщения в зависимости от какой-то конкретной строки, вы можете выполнить некоторые манипуляции с полученным сообщением, а затем прервать его.
Если вы хотите прервать все сообщения, вы можете напрямую вызвать abortBroadcast () перед выполнением любогоманипуляции с этим сообщением.
Bundle extras = intent.getExtras();
if ( extras != null )
{
// do you manipulation on String then if you can abort.
if(somecondition){
abortBroadcast();
}
}
Вот мой манифест, который работает нормально, если сравнить его с вашим кодом
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<application android:icon="@drawable/icon" android:enabled="true" android:label="@string/app_name">
<service android:name="com.mypackage.service.MyService" android:exported="true">
</service>
<receiver android:name="com.mypackage.receiver.MyReceiver">
<intent-filter android:priority="100"><action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter>
</receiver>
</application>
</manifest>
и кодом Java
public void onReceive( Context context, Intent intent )
{
if(intent != null){
String action = intent.getAction();
if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle extras = intent.getExtras();
if ( extras != null ){
//read sms
}
}
}
}