2016-04-29 5 views
0

Я довольно новичок в android, и я пытался динамически регистрировать свой Broadcastreceiver, чтобы получить smss, но я просто не могу заставить его работать, вот мой код:Невозможно зарегистрировать Broadcastreceiver динамически

public class MainActivity extends AppCompatActivity { 

BroadcastReceiver receiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     } 
    }); 

    receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), "Hellllo", Toast.LENGTH_SHORT).show(); 
     } 
    }; 
    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(receiver,filter); 
} 

«здравствуйте» Toast обыкновения всплывало поэтому я предполагаю, приемник не был зарегистрирован

Я поставил это разрешение в моем манифесте:

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

Что я упускаю ?

+1

Является ли ваша «деятельность» на переднем плане, когда вы получаете SMS? Являются ли ваши разрешения за пределами тегов ''? Какова ваша 'targetSdkVersion', и какую версию Android вы тестируете? –

+0

Деятельность находится на переднем плане, когда я получаю SMS. Разрешения находятся за пределами тегов . minSdkVersion 16. targetSdkVersion 23. Тестирование на Android 4.2.2 API 17. – javaLovah

+2

У вас есть другое приложение для SMS, которое может перехватывать трансляцию? Как Hangouts или GoSMS? –

ответ

0

Мы определили в комментариях, что трансляция SMS_RECEIVED была перехвачена и прервана другим приложением. Это было возможно в Android до KitKat (API 19), но с тех пор оно не в версиях.

Решение было установить приоритет на примере IntentFilter на 999, используя метод IntentFilter#setPriority().

Обратите внимание, что все еще возможно, чтобы другое приложение прекратило трансляцию до того, как вы ее получите. Хотя в документах указано, что приемники с IntentFilter s с одинаковым приоритетом будут доставлять вещание в произвольном порядке, обычно выдается, что они доставлены в том порядке, в котором установлены приложения. Кроме того, некоторые приложения, например, системные приложения, предустановленные приложения и т. Д., Могут иметь приоритет выше 999, что является максимальным практическим значением для вашего приложения.

Смежные вопросы