Вопрос

Я сталкивался с некоторыми проблемами, пытающимися передавать данные через Intents и в ожидании намерений к широко-обратному, касающемуся близорукостям. Более конкретно, пытаюсь пройти объект, что среди других удерживает постоянно меняющееся положение пользователя. Я попробовал различные тактики, предложенные здесь (и не только), но никто не обрабатывался, что приведет к тому, что либо нулевые значения, либо одинаково - в первую очередь созданные цели, когда намерение извлекается на стороне широководства. Тактики используются:

  • Промежуток намерения, который несет объект с: flag_activity_new_task + flag_activity_clear_top + flag_activity_single_top Результат: нулевые значения на стороне широковещателя
  • Промежуток в ожидании намерения, созданный с использованием начального намерения, с: flag_update_current или flag_cancel_current Результат: нулевые значения на стороне широковещателя
  • Приобретение случайного идентификатора для намерения или в ожидании намерения с использованием System.CurrentTimeMillis (); Результат: намерение не уволено или не получено вообще
  • Ничего не описано выше. Результат: Получение того же начального значения каждый раз.

Код для метода вызова (отделен из любых экспериментов / производства нулевых значений):

private void setProximityAlert(MyCar myCar) { 
  String locService = Context.LOCATION_SERVICE; 
  LocationManager locationManager; 
  locationManager = (LocationManager)getSystemService(locService);
  float radius = myCar.getMyCarRadius(); 
  long expiration = myCar.getMyCarExpiration(); 
  myService.setMyDriverLat(userLat);//setting user's position
  myService.setMyDriverLng(userLng);//setting user's position
  Intent  intent = new Intent(myCar.getMyCarName());
  intent.putExtra("myCar",myCar);

  PendingIntent proximityIntent = PendingIntent.getBroadcast(this, -1, intent, 0);
  locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);
 }

Код для метода вызова, который устанавливает фильтр «Намеренные» и регистрируют широковетелю:

public void addNewCarPoint (MyCar myCar){
        IntentFilter filter = new IntentFilter(myCar.getMyCarName());
        registerReceiver(new ProximityAlertReceiver(), filter);
        setProximityAlert(myCar);
    }

Код для сторон широкостеризации:

public class ProximityAlertReceiver extends BroadcastReceiver {
 @Override
 public void onReceive (Context context, Intent intent) {
 MyCar myCar=(MyCar)intent.getParcelableExtra("myCar");
  driverLoc=(String)Double.toString(myCar.getMyDriverLat());
  Toast.makeText(context, userLoc, Toast.LENGTH_SHORT).show();
  Intent i = new Intent(context, MyCarDiscoveryPrompt.class);
  context.startActivity(i);//firing intent
 }
 public void intentDataLoader(){      
 }

}

Любые идеи будут более чем приветствуются. Заранее спасибо.

Это было полезно?

Решение

Хм, я думаю, что я нашел что-то:

Я поместил BroadCastreceiver (ProximityAleRreceiver), используемый для обнаружения пропорциональных предупреждений в том же классе (MyCartracking.class), где расположен locationListener.class. Это обеспечивает немедленный доступ к обновлениям свежего местоположения, создавая новое намерение, завернутое в новом искуплении, которое будет выпущено в BroadCastreceiver (только при выполнении критериев близости). Флаги: flag_activity_new_task + flag_activity_single_top и flag_cancel_current на намерениях и zendentintent, были сохранены соответственно. Более конкретно:

Код для locationListener:

private final LocationListener locationListener = new LocationListener() { 
        public void onLocationChanged(Location location) {
            updateWithNewLocation(location);//update application based on new location
        }
        public void onProviderDisabled(String provider){ 
            updateWithNewLocation(null);//update application if provider disabled
        }
        public void onProviderEnabled(String provider){
            // Update application if provider enabled
        } 
        public void onStatusChanged(String provider, int status, Bundle extras){ 
            //update application if provider hardware status changed
        }
    };

Код для SetProximityalert () Метод:

private void setProximityAlert() { 
    String locService = Context.LOCATION_SERVICE; 
    Context context =getApplicationContext();
    LocationManager locationManager; 
    locationManager = (LocationManager)getSystemService(locService);
    float radius = myCar.getMyCarRadius(); 
    long expiration = myCar.getMyCarExpiration(); 
    Intent  intent = new Intent(CAR_DISCOVERED);
    intent.putExtra("myCar",myCar);
    locationManager.getLastKnownLocation(provider);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//flagging intent
    PendingIntent proximityIntent = PendingIntent.getBroadcast(context, -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);//flagging pendingIntent         
    locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);//setting proximity alert
}

Это решение работает, создавая свежие напряжения со свежими обновлениями местоположения. Спасибо всем за вашу помощь и ваш интерес :)

Другие советы

Попробуйте добавить Intent.SetData (URI); где URI - это некоторое уникальное значение для каждого ожидающего намерения

Я также боролся с этой проблемой. Мне потребовалось целая ночь, чтобы найти, что странная ошибка, которую я имел связан с этим вопросом.

Вот хорошее обсуждение в Google Code по теме: http://groups.google.com/group/android-developers/browse_thread/thrad/b2060b27c8934921.

Я решил все свои проблемы с помощью (AB), используя как URI в SetData, так и (зарезервированном) коде запроса в Pondendendevent.getwhatever.

Я также использую Flag_cancel_Current на моем намерении и убедившись только в том, что он разделяет ту же цель, получите те же данные, действие и URI.

Надеюсь, это немного поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top