GPS和网络的广播接收器

时间:2019-01-01 17:36:12

标签: java android broadcastreceiver

我正在尝试检测网络和gps的状态,我想请用户打开它们,以防它们被关闭。

这是我第一次使用BroadcastReceiver,已经阅读了文档并创建了此方法。

我想创建一个动态接收器而不是一个静态接收器。

能不能帮我纠正这种方法,因为它们不能正常工作,我也不知道问题出在哪里。

/// BroadcastReceiver类:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        Intent newintent;
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            newintent = new Intent();
            intent.putExtra("Network", "CONNECTIVITY");
            context.sendBroadcast(newintent);
        }

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            newintent = new Intent();
            intent.putExtra("GPS", "GPSPROVIDER");
            context.sendBroadcast(newintent);
        }
    }
}

//我希望此接收器工作的活动:

MyBroadcastReceiver broadcastReceiver = new MyBroadcastReceiver();
@Override
protected void onStart() {
    super.onStart();

    IntentFilter filter = new IntentFilter();
    registerReceiver(broadcastReceiver, filter);
    Log.d(TAG, "onStart: broadcastReceiver Start");
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String newtork = extras.getString("Network");
        String gps = extras.getString("GPS");
        if(newtork == "CONNECTIVITY" || gps == "GPSPROVIDER"){
            Log.d(TAG, "onStart: Something Change");
            checkServices();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我看到的第一个问题是您的意图过滤器不包含任何操作。您可能想要这样的东西:

IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(broadcastReceiver, filter);

第二个问题是您创建并作为广播发送的新意图未定义动作。它仅包含其他内容。您将想要执行以下操作:

 newintent = new Intent("SOME_ACTION");
 newintent.putExtra("Network", "CONNECTIVITY");
 context.sendBroadcast(newintent);

然后,您需要定义一个可以接收SOME_ACTION的接收器。