0

現在地を取得できないようです。このダイアログの後半で、MyLocation というクラスを呼び出します。今までこのクラスで困ったことはありません。今、私はいくつかの異なるアプローチを試みましたが、役に立ちませんでした。しかし、私の問題は文脈にあると信じています。

Fragment の AlertDialog でこれを使用するのはこれが初めてです。この行が私に問題を引き起こしていると思います。

myLocation.getLocation(context, locationResult);

パブリック ビュー onCreateView でコンテキストを定義します

context = getActivity().getApplicationContext();

public void gotLocation が呼び出されていないように見えるだけで、アラートは意図したとおりに機能しています。

 public void showLocationDialog() {
    new AlertDialog.Builder(this.getActivity()).setItems(C,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialoginterface, int i) {
                    if (i == 0) {

                        LayoutInflater inflater = LayoutInflater
                                .from(getActivity());
                        final View textenter = inflater.inflate(
                                R.layout.dialog_location, null);
                        final EditText userinput = (EditText) textenter
                                .findViewById(R.id.etLocation);
                        final AlertDialog.Builder builder = new AlertDialog.Builder(
                                getActivity());
                        builder.setView(textenter).setTitle(
                                "Enter Location or where abouts");
                        builder.setPositiveButton("Set",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(
                                            DialogInterface dialog, int id) {
                                        if (userinput != null){
                                            tvLocation.setText(userinput.getText().toString());  
                                            dialog.cancel();
                                        } else {
                                            dialog.cancel();
                                            showLocationDialog();
                                            Log.e("NULL", "Dismiss");
                                        }                           
                                    }
                                }).setNegativeButton("Cancel",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(
                                            DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        builder.show();             
                    } else if (i == 1) {                 
                        LocationResult locationResult = new LocationResult() {
                            @Override
                            public void gotLocation(Location location) {             
                                // Got the location!
                                location.getLatitude();
                                location.getLongitude();

                                String loc = location.getLatitude() + ","
                                        + location.getLongitude();

                                etLocation.setText(loc);
                            }
                        };                           
                        MyLocation myLocation = new MyLocation();
                        myLocation.getLocation(context, locationResult);
                    }
                }
            }).show();
}

私の場所:

public class MyLocation {
Timer timer1;
LocationManager lm;
LocationResult locationResult;
boolean gps_enabled = false;
boolean network_enabled = false;

public boolean getLocation(Context context, LocationResult result) {
    // I use LocationResult callback class to pass location value from
    // MyLocation to user code.
    locationResult = result;
    if (lm == null)
        lm = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);

    // exceptions will be thrown if provider is not permitted.
    try {
        gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
    }
    try {
        network_enabled = lm
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {
    }

    // don't start listeners if no provider is enabled
    if (!gps_enabled && !network_enabled)
        return false;

    if (gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                locationListenerGps);
    if (network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
                locationListenerNetwork);
    timer1 = new Timer();
    timer1.schedule(new GetLastLocation(), 20000);
    return true;
}

LocationListener locationListenerGps = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerNetwork);
    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

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

LocationListener locationListenerNetwork = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerGps);
    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

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

class GetLastLocation extends TimerTask {
    @Override
    public void run() {
        lm.removeUpdates(locationListenerGps);
        lm.removeUpdates(locationListenerNetwork);

        Location net_loc = null, gps_loc = null;
        if (gps_enabled)
            gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (network_enabled)
            net_loc = lm
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        // if there are both values use the latest one
        if (gps_loc != null && net_loc != null) {
            if (gps_loc.getTime() > net_loc.getTime())
                locationResult.gotLocation(gps_loc);
            else
                locationResult.gotLocation(net_loc);
            return;
        }

        if (gps_loc != null) {
            locationResult.gotLocation(gps_loc);
            return;
        }
        if (net_loc != null) {
            locationResult.gotLocation(net_loc);
            return;
        }
        locationResult.gotLocation(null);
    }
}

public static abstract class LocationResult {
    public abstract void gotLocation(Location location);
}
}
4

1 に答える 1