在服务中注册接收者

Vic*_*Vic 32 android

我有一个service可以启动和停止的button.

但在service我想要注册一个接收器来收听短信广播.我只想在service运行时收听短信.我试过registerReceiver(receiver, intentfilter)但这不起作用.我究竟做错了什么?

rf4*_*f43 89

如果您只想在服务运行时接收广播,则需要在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();
    }
}
Run Code Online (Sandbox Code Playgroud)


fic*_*ion 6

您必须在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"/>
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是你在清单中添加接收器的方式,但我想动态注册它.上面的方法会监听所有传入的SMS,即使我的服务已停止.我想只在我的服务运行时收听短信. (4认同)