Мое приложение получает обновления GPS раз в секунду. Он также получает значения RSSI соединения Wifi один раз в секунду. Проблема, с которой я столкнулась, заключается в том, что BroadcastReceiver никогда не вызван. Может кто-то указать, что я делаю неправильно. Я просмотрел множество вопросов, связанных с stackoverflow, а также других сайтов, но я не могу понять, что я делаю неправильно. Мой код ниже:BraodcastReceiver не называется
final String locAction = "com.android.ping.STARTGPS";
PendingIntent pIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(locAction);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!isGPSEnabled) {
Log.i(TAG,"PING: GPS not enabled");
} else {
Log.i(TAG,"PING: GPS enabled");
pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_time_BW_Updates, MIN_Distance_Change_For_Updates, pIntent);
registerReceiver(myWifiReceiver, new IntentFilter(locAction));
Log.i(TAG,"PING: adding GPS status listener");
}
}
BroadcastReceiver:
protected BroadcastReceiver myWifiReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent){
Log.i(TAG, "PING: inside onReceive");
if (intent.getAction().equals(locAction)){
String locationKey = LocationManager.KEY_LOCATION_CHANGED;
Location location = (Location) intent.getExtras().get(locationKey);
Log.i(TAG, "PING: location is " + location.getLatitude() + ", " + location.getLongitude());
setLocation(location.getLatitude(), location.getLongitude());
try {
WifiInfo(); //Calls the function that gets the RSSI
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Целью является незарегистрированной здесь:
@Override
protected void onStop() {
super.onStop();
locationManager.removeUpdates(pIntent);
unregisterReceiver(myWifiReceiver);
}
Мой файл манифеста, где зарегистрировать BroadcastReceiver:
<receiver android:name="PingActivity" >
<intent-filter>
<action android:name="com.android.ping.STARTGPS" />
</intent-filter>
</receiver>
EDIT 1: Я также должен добавить, что я жестко программирую IP-адреса (на данный момент) в приложении и разворачиваю их на двух разных устройствах. В зависимости от IP-адреса устройства запускают либо сервер, либо клиентский поток. Эта часть кода следует сразу же после того, как зарегистрировать BroadcastReceiver
«Мое приложение получает обновления GPS один раз в секунду» - GPS не дает никаких гарантий относительно скорости, с которой GPS-приемник может получить исправления. – CommonsWare
Вам не нужно регистрировать его в манифесте, если вы делаете это динамически. BTW Попробуйте эту технику: http://developer.android.com/guide/topics/location/strategies.html –
@CommonsWare - да, я уже тестировал автономное приложение GPS. Я получаю обновления, близкие к секунде, и все в порядке. – Sarvavyapi