2013-10-08 2 views
0

Мое приложение получает обновления 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

+0

«Мое приложение получает обновления GPS один раз в секунду» - GPS не дает никаких гарантий относительно скорости, с которой GPS-приемник может получить исправления. – CommonsWare

+0

Вам не нужно регистрировать его в манифесте, если вы делаете это динамически. BTW Попробуйте эту технику: http://developer.android.com/guide/topics/location/strategies.html –

+0

@CommonsWare - да, я уже тестировал автономное приложение GPS. Я получаю обновления, близкие к секунде, и все в порядке. – Sarvavyapi

ответ

1

Обратите внимание, что вы объявляете broadcast в манифесте с именем PingActivity и ваш класс реализации называется myWifiReceiver Yout должны переименовать его в PingActivity, а также сделать вашу трансляцию отдельный класс.

+0

Добавление трансляции в манифест было одной из моих попыток исправить проблему, но я удалил ее сейчас, так как я регистрирую ее внутри своего приложения. Я также попытался сделать трансляцию отдельным классом, который не сработал. – Sarvavyapi

+0

В зависимости от подхода, который вы выбираете, требуется крутой, что вам нужно сделать, вы можете увидеть эту статью http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html – xhamr

Смежные вопросы