将数据从BroadcastReceiver传递到Service [英] passing data from BroadcastReceiver to Service

查看:61
本文介绍了将数据从BroadcastReceiver传递到Service的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是创建一种从广播接收器获取数据的方法.

My goal is to create a method that gets the data from broadcast receiver.

我有一个注册了BroadcastReceiver的服务,以监视电池的插入和拔出.我如何从BroadcastReceiver获取数据?我想在此服务类中接收数据:

I have a service that register a BroadcastReceiver to monitor battery plug and unplug. How can i get data from BroadcastReceiver ? I want to receive data in this service class:

服务:

public class myService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        registerReceivers();

        return START_NOT_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private synchronized void registerReceivers() {

        IntentFilter chargeFilter = new IntentFilter( Intent.ACTION_POWER_CONNECTED );
        chargeFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);

        registerReceiver(eCharge, chargeFilter);

    }
}

这是接收者:

public class EventCharge extends BroadcastReceiver {

    private static String TAG = "Event Charge";

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
            status == BatteryManager.BATTERY_STATUS_FULL;
        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

        String messagge = "PS: " + ((action == Intent.ACTION_POWER_CONNECTED) ? "C" : "D") + " [ usb: " + usbCharge + " ac: " + acCharge + " ]";

        Log.e(TAG, messagge );

    }
}

有解决方案吗?

推荐答案

在接收器中,您可以将所有参数放入Bundle,然后使用包含该bundle的startService(Intent)调用目标服务.在使用中,您将解析分发包并获取所有参数.

In receiver, you can just put all params into a Bundle, and use startService(Intent) containing that bundle to call the target service. In service, you parse the bundle and get all params.

这篇关于将数据从BroadcastReceiver传递到Service的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆