2013-06-23 6 views
1

У меня возникли проблемы с тем, чтобы мой радиоприемник срабатывал. Мой код выглядит следующим образом:SMS-приемник не срабатывает

<receiver android:name="com.test.android.receivers.SMS" > 
     <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
</receiver> 




public class SMS extends BroadcastReceiver { 
private final String TAG = this.getClass().getSimpleName(); 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    Bundle pudsBundle = intent.getExtras(); 
    Object[] pdus = (Object[]) pudsBundle.get("pdus"); 
    SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); 
    Logger.sendLog(TAG, messages.getOriginatingAddress()); 
} 

} 

Устройство HTC One X работает с новой версией CM.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.android" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<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="com.test.android.UIMain" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.test.android.UISettings" 
     android:label="@string/title_activity_uisettings" > 
    </activity> 

    <service android:name=".services.LocService" > 
    </service> 

    <receiver android:name="com.test.android.receivers.SMS" > 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

</manifest> 

ответ

0

Вы должны использовать разрешение READ_SMS в своем манифесте, прежде чем иметь хотя бы 1 шанс перехватить ваши SMS-сообщения.

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

и RECEIVE_SMS добавлены без разницы. – JamieB

+0

Вы пытались прочитать старую ссылку на SO о классе BroadcastReceiver? Я нашел много вопросов о людях, борющихся с этим классом. Попробуйте это, например, http://stackoverflow.com/questions/4117701/android-sms-broadcast-receiver – Rob013

0

добавить эту строку в андроида файл манифеста

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

Эта линия проходит непосредственно под <manifest> тега следующим образом:

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

    </application> 
</manifest> 

Update

Я нашел Это в source code по умолчанию приложение для Android Mms:

<!-- Require sender permissions to prevent SMS spoofing --> 
<receiver android:name=".transaction.PrivilegedSmsReceiver" 
    android:permission="android.permission.BROADCAST_SMS"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

Комментарий на блоке дает мне впечатление, что вам нужно приобрести <uses-permission android:name="android.permission.SEND_SMS" /> тоже.

Попробуйте и сообщите мне, если это сработало.

+0

Как уже упоминалось в другом комментарии, это уже относится к моему приложению. – JamieB

+0

в '' у вас есть атрибут 'android: enabled' установлен на false ?. если это так, ваш ресивер также будет отключен. что означает, что система не сможет позвонить вашему ресиверу. – kdehairy

+0

Я добавил свой манифест для просмотра. Я не включил значение false. – JamieB

0

комплект android:exported="true" внутри ваш приемник бирка. Это сделает ваш приемник доступным для другого приложения. За дополнительной информацией обращайтесь к this.

Так что ваш окончательный код должен выглядеть,

<receiver android:name="com.test.android.receivers.SMS" 
      android:exported="true" > 
     <intent-filter 

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

Я думаю, что это должно решить проблему.

+0

К сожалению, это не решило проблему. Спасибо за ввод. – JamieB

+0

Извините, что написал неправильный код. См. Отредактированный. Скажите, если это не сработает. – Dulanga

+1

'android: exported' установлен в значение' true' по умолчанию, если вы предоставили '' target-filter> 'в своей декларации. так что это действительно «истина» здесь, не сказав это явно. – kdehairy