2016-01-30 6 views
0

Внутри моей MainActivity Я создаю трубку и посылая в эфир:Почему широковещательный приемник никогда не вызван?

GPSStartedReceiver receiver = new GPSStartedReceiver(); 
this.registerReceiver(receiver, new IntentFilter("android.location.GPS_ENABLED_CHANGE")); 
Intent intent = new Intent(); 
intent.setAction("com.test.broadcastReceiver.GPSStartedReceiver()"); 
sendBroadcast(intent); 

Но когда я включаю мой GPS, широковещательный приемник не вызывается.

Ниже приводится часть приемника в Manifest:

<receiver android:name="com.test.broadcastReceiver.GPSStartedReceiver"> 
     <intent-filter> 
      <action android:name="android.location.GPS_ENABLED_CHANGE" /> 
     </intent-filter> 
</receiver> 

И Broadcast Receiver:

public class GPSStartedReceiver extends BroadcastReceiver { 

    // Start service 5 seconds after GPS is enabled 
    private static final long WAIT_TIME = 1000 * 5; 
    // Restart service every 30 seconds 
    private static final long REPEAT_TIME = 1000 * 30; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     if (intent.getAction().equals("android.location.GPS_ENABLED_CHANGE")) { 

      final Handler handler = new Handler(); 

      Toast.makeText(context, 
        context.getResources().getString(R.string.starting_in_5), 
        Toast.LENGTH_SHORT).show(); 

      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        AlarmManager service = (AlarmManager) context 
          .getSystemService(Context.ALARM_SERVICE); 
        Intent i = new Intent(context, GPSTracker.class); 
        PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, 
          PendingIntent.FLAG_CANCEL_CURRENT); 
        Calendar cal = Calendar.getInstance(); 
        // Start 30 seconds after boot completed 
        cal.add(Calendar.SECOND, 30); 
        // Fetch every 30 seconds 
        service.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
          cal.getTimeInMillis(), REPEAT_TIME, pending); 
       } 
      }, WAIT_TIME); 

     } 
    } 
} 

Почему в приемник никогда не дозвонились, даже если включить мой GPS?

+0

Не понимаю. Вы хотите что-то активировать, когда gps получает возможность включения/выключения ??? – Pankaj

+0

@Clairvoyant Да! И GPSStartedReceiver() никогда не вызывается! – alfakaiwmega

+0

Можете ли вы, как ваш код приемника вещания – Pankaj

ответ

0

Использования PROVIDERS_CHANGED_ACTION Добавлено в уровне API 9 Broadcast намерения действий, когда настроенные изменения провайдеров местонахождения. Для использования с isProviderEnabled (String). Если вы взаимодействуете с LOCATION_MODE API, вместо этого используйте MODE_CHANGED_ACTION.

Константа Значение: "android.location.PROVIDERS_CHANGED"

Вы можете найти решение на this SO post

+0

Этот ответ именно то, что я искал! Спасибо! – alfakaiwmega

0

Вы пробовали зарегистрироваться в BroadcastReceiver для прослушивания Intent Action PROVIDERS_CHANGED_ACTION? Если это не сработает, вы можете получить экземпляр locationManager, а затем зарегистрировать GpsStatusListener следующим образом: mLocationManager.addGpsStatusListener(new android.location.GpsStatus.Listener()) и использовать его внутренние методы.

Надеется, что это помогает

+0

Это сработало! Спасибо – alfakaiwmega

+0

Рад, что это помогло. Пожалуйста, отметьте его как разрешенную, если это будет сделано. Ура! –