Intereting Posts
Как полностью заменить listView / GridView с помощью RecyclerView? Google Play – обнаружен неверный минимум API База данных Android SQLite: медленная вставка Темы WebView никогда не останавливаются (WebViewCoreThread, CookieSyncManager, http ) Воспроизведение предварительно записанного звука в голосовой вызов Проблемы с защитой с файлами jar, как найти недостающую банку? Как добавить изображение в текст TextView? Android: ClassNotFoundException при передаче сериализуемого объекта в Activity Как передать значение с одной HTML-страницы на другую с помощью JavaScript? В чем разница между getExtras и getBundleExtras? Ошибка раздувания фрагмента класса – дублирование id / нелегального запуска? Android | Получить все дочерние элементы группы ViewGroup Dagger 2 Custom Scope для каждого фрагмента (или Activity и т. Д.) Android: вертикальное выравнивание для нескольких строк EditText (область текста) Как использовать Gradle, как я могу гарантировать, что файл существует в определенном месте?

Регистрировать приемник в службе

У меня есть service которую можно запустить и остановить с button .

Но в рамках service я хочу зарегистрировать приемника для прослушивания SMS-трансляций. Я хочу, чтобы service прослушивала SMS во время ее работы. Я пробовал registerReceiver(receiver, intentfilter) но это не работает. Что я делаю не так?

Solutions Collecting From Web of "Регистрировать приемник в службе"

Вы должны установить разрешения в файле AndroidManifest.

  <receiver android:name=".MySMSReciever"> <intent-filter> <action android:name= "android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

Если вы хотите получать широковещательную передачу только во время работы вашей службы, вам необходимо будет динамически зарегистрировать ваш приемник в onCreate ()

Также важно не забывать отменить регистрацию получателя в методе onDestroy ()!

Пример:

 import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.widget.Toast; public class YourClass extends Service { private static final String ACTION="android.provider.Telephony.SMS_RECEIVED"; private BroadcastReceiver yourReceiver; @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); final IntentFilter theFilter = new IntentFilter(); theFilter.addAction(ACTION); this.yourReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Do whatever you need it to do when it receives the broadcast // Example show a Toast message... showSuccessfulBroadcast(); } }; // Registers the receiver so that your service will listen for // broadcasts this.registerReceiver(this.yourReceiver, theFilter); } @Override public void onDestroy() { super.onDestroy(); // Do not forget to unregister the receiver!!! this.unregisterReceiver(this.yourReceiver); } private void showSuccessfulBroadcast() { Toast.makeText(this, "Broadcast Successful!!!", Toast.LENGTH_LONG) .show(); } } 

Удалите фильтр намерений из xml и выполняйте только динамическую регистрацию получателя. Если вы не хотите, чтобы он работал, когда служба отключена, отмените регистрацию до остановки службы. Не забудьте добавить разрешение на xml, хотя ….