我正在尝试检测网络和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();
}
}
}
答案 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的接收器。