2015-04-15 2 views
0

Я пытаюсь создать приложение, которое получает уведомления о входящих sms. Мне нужна помощь, поскольку входящие SMS-сообщения не обнаружены ни на одном устройстве. Я использую следующий код, который я получил здесь:Android SMS Broadcast Receiver не работает

http://karanbalkar.com/2014/09/display-incoming-sms-messages-in-android/

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class MySMSApp extends BroadcastReceiver { 

public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if (intent.getAction().equals(ACTION)){ 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null){ 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++){ 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
      for (SmsMessage message : messages){ 

       String strMessageFrom = message.getDisplayOriginatingAddress(); 
       String strMessageBody = message.getDisplayMessageBody(); 

       Toast.makeText(context, "SMS Message received from:" +strMessageFrom, Toast.LENGTH_LONG).show(); 
       Toast.makeText(context, "SMS Message content" +strMessageBody, Toast.LENGTH_LONG).show(); 

      } 
     }  
    } 
} 

И манифест гласит. Я настроил приемник намерения, чтобы вызвать класс выше, но, похоже, это не так. Я не могу подключиться к эмулятору, чтобы подделать входящие sms, и поэтому я не знаю, что происходит.

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.RECEIVE_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" > 
    <activity 
     android:name=".MainActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:label="@string/app_name" 
     android:theme="@style/FullscreenTheme" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <receiver android:name=".SMSBroadcastReceiver" > 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </activity> 
</application> 

+0

совет Следуйте Маттиа в. Он прав. Кроме того, на всякий случай, не используйте последний целевой файл sdk, используйте тот же уровень api, что и в найденном вами учебнике. Что-то изменилось в Kit-Kat/Lollipop в отношении смс, поэтому вам может понадобиться обновить код из учебника, если вы хотите использовать последний номер уровня api. Кроме того, это не помешает добавить это, если вы поместите его в производство: (чтобы ваше приложение было невидимым для планшетов без возможности сотового телефона). –

ответ

2

В AndroidManifest.xml вы используете SMSBroadcastReceiver, но ваше BroadcastReceiver имя класса MySMSApp. Также ваш элемент <receiver> находится внутри элемента <activity>.

Попробуйте использовать это:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:label="@string/app_name" 
     android:theme="@style/FullscreenTheme" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".MySMSApp"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application>