Android - широковещательный приемник не запускается - PullRequest
1 голос
/ 06 августа 2011

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

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

Вот мой манифест:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.encima.smsreceiver"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".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>
         <receiver android:name=".MessageReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>

А вот ресивер, здесь нет ничего нового, поэтому я понятия не имею, в чем проблема:

package com.encima.smsreceiver;

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

public class MessageReceiver extends BroadcastReceiver {

    private static final String TAG = "Message recieved";
    @Override
    public void onReceive(Context context, Intent intent) {
         Bundle pudsBundle = intent.getExtras();
         Object[] pdus = (Object[]) pudsBundle.get("pdus");
         SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);    
         Log.i(TAG,  messages.getMessageBody());
         Toast.makeText(context, "SMS Received : "+messages.getMessageBody(),
         Toast.LENGTH_LONG).show();
    }

}

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

Любое понимание этого будет оценено!

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Поскольку намерение широковещательной рассылки SMS отправляется Context.sendOrderedBroadcast (...) , если какое-либо другое приложение регистрирует BroadcastReceiver и вызывает abortBroadcast, другой получатель не получит трансляцию.

Чтобы повысить вероятность того, что ваше приложение получит широковещательную рассылку, создайте IntentFilter, используйте IntentFilter.setPriority .

0 голосов
/ 06 августа 2011

Я не знаю, если это ваша проблема, но вы должны обязательно попробовать это:

Вместо ".MessageReceiver" поставить android:name = "com.encima.smsreceiver.MessageReceiver"

Это исправление, которое тренирует меня много раз, когда что-то не вызывается.

...