Как получить координату GPS в классе BroadcastReceiver - PullRequest
0 голосов
/ 29 июня 2011

У меня в классе BroadcastReceiver есть метод, который проверяет наличие смс-триггера и выполняет функции на основе сработавшего триггера. Это метод фильтрации содержимого смс и возврата сообщения для отправки в ответ смс.

В настоящее время у меня есть условие, которое при условии «локатора» регистрирует locationListener для сети / GPS. Но я продолжаю возвращать "msg" с пустым содержимым до правильного поиска данных о координатах.

Я пробовал цикл while, но сделал его нервным, я подозреваю бесконечный цикл. Также попробовал startActivityResult, но не смог.

Пожалуйста, совет.

public String methodTrigger(Context context, String operation){
        String returnMsg="";

        if (operation.equalsIgnoreCase("Lock")){
            Intent lock = new Intent(context, lockscreen.class);
            lock.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(lock);
            returnMsg = "Lock Operation Enabled";
        }else if(operation.equalsIgnoreCase("Locate")){
            String msg = "";
            Log.i("monitor", "Create");
            LocationManager lm = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
            LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location location) {
                    // Called when a new location is found by the network location provider.
                    int lat = (int) (location.getLatitude() * 1E6);
                    int lng = (int) (location.getLongitude() * 1E6);
                    test = "Latitude: "+String.valueOf(lat)+"\nLongitude: "+String.valueOf(lng);
                    Log.i("monitor", "Reading coordintes");
                }

                public void onStatusChanged(String provider, int status, Bundle extras) {}
                public void onProviderEnabled(String provider) {}
                public void onProviderDisabled(String provider) {}
            };

            // Register the listener with the Location Manager to receive location updates
            if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){
                lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
                Log.i("monitor", "Listen Network");
            }else{
                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
                Log.i("monitor", "Listen GPS");
            }
            Log.i("monitor", "Finish");
            returnMsg = test;
        }else if(...other functions.....
        }
        return returnMsg;
    }

1 Ответ

0 голосов
/ 22 октября 2011

Вы не можете сделать это таким образом, потому что methodTrigger возвращается до вызова onLocationChanged.

...