繁体   English   中英

通知来自广播接收器的片段或活动

[英]Notice fragment or activity from broadcast receiver

我需要广播接收机的通知片段/活动,但找不到解决方案。

说明:当片段启动我的方法时,如果没有要求用户打开GPS模块,请检查GPS模块是否为ON。 现在,我已经为gps广播了接收器,并且当gps开启或关闭时,我收到消息,这可行。 但是现在我需要做一些类似界面的事情,当我打开/关闭GPS时,我想分段调用我的方法。 我不确定是否清楚我需要什么。 在这里,我尝试使用接口,但随后发现,因此无法将接口对象传递给广播接收器构造函数。

我的界面解决方案不起作用:

    public class GpsLocationReceiver extends BroadcastReceiver {

    private INotifyGpsTurnedOn iNotifyGpsTurnedOn = null;

    public GpsLocationReceiver(INotifyGpsTurnedOn iNotifyGpsTurnedOn) {
        this.iNotifyGpsTurnedOn = iNotifyGpsTurnedOn;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        LocationManager lm = (LocationManager) context.getSystemService(Service.LOCATION_SERVICE);
        boolean isEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        Toast.makeText(context, isEnabled+"",
                Toast.LENGTH_SHORT).show();

        if(isEnabled){
            iNotifyGpsTurnedOn.iniGps();
        }
        else{
            iNotifyGpsTurnedOn.askTurnOnGps();
        }
    }

    public interface INotifyGpsTurnedOn {
        public void iniGps();
        public void askTurnOnGps();
    }
}

在片段类中,我具有与方法,寄存器接收器等的实现接口...

 GpsLocationReceiver m_gpsChangeReceiver = new GpsLocationReceiver(this);
    getActivity().registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));

    @Override
public void iniGps() {
    mGps.startGps(false);
}

@Override
public void askTurnOnGps() {
    mGps.askUserToTurnOnGPS(getActivity());
}

这样很好。 您可以声明一个Interface并在构造函数中提供它。 只要您自己实例化BroadcastReceiver ,并且不要让Android执行此操作,此方法就起作用。 您无需在清单中声明此BroadcastReceiver

出现Exception: Unable to instantiate receiver no empty constructor.的原因Exception: Unable to instantiate receiver no empty constructor. 因为Android试图实例化BroadcastReceiver (无论出于何种原因)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM