Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Вы должны установить разрешения в файле 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"/>

Ответ 2

Если вы хотите получать широковещательную передачу только во время работы вашей службы, вам необходимо будет динамически зарегистрировать ваш ресивер в 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();
    }
}

Ответ 3

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