【问题标题】:Latitude and Longitude is not displaying纬度和经度不显示
【发布时间】:2016-10-05 16:23:26
【问题描述】:

我想显示当前位置的纬度、经度,并在三个文本视图中显示该位置的纬度和经度的位置名称。但是 tv_lat 和 tv_long 中没有显示经纬度值。

public class MainActivity extends AppCompatActivity implements NetworkCallback, LocationListener {

private EditText empIdTxt;
private EditText passwordTxt;
private TextView tv_lat;
private TextView tv_long;
private TextView tv_place;
private Button loginBtn;
protected Location mLastLocation;
LocationManager locationmanager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    empIdTxt = (EditText) findViewById(R.id.et_loginId);
    passwordTxt = (EditText) findViewById(R.id.et_loginPass);
    tv_lat = (TextView) findViewById(R.id.tv_lat);
    tv_long = (TextView) findViewById(R.id.tv_long);
    tv_place = (TextView) findViewById(R.id.tv_place);
    loginBtn = (Button) findViewById(R.id.bt_login);

    empIdTxt.addTextChangedListener(new MyTextWatcher(empIdTxt));
    passwordTxt.addTextChangedListener(new MyTextWatcher(passwordTxt));

    empIdTxt.setText("vinay");
    passwordTxt.setText("qwerty");

    locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria cri = new Criteria();
    String provider = locationmanager.getBestProvider(cri, false);
    if (provider != null & !provider.equals("")) {
        Location location = locationmanager.getLastKnownLocation(provider);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        locationmanager.requestLocationUpdates(provider, 2000, 1, this);
        if(location!=null) {
            onLocationChanged(location);
        }else{
            Toast.makeText(getApplicationContext(),"location not found",Toast.LENGTH_LONG ).show();
        }
    }else{
        Toast.makeText(getApplicationContext(),"Provider is null",Toast.LENGTH_LONG).show();
    }
}

public void clickLogin(View v) {
    if (!validateEmpID()) {
        return;
    }
    if (!validatePassword()) {
        return;
    }

    LoginApi api = new LoginApi(this, this);
    api.processLogin(empIdTxt.getText().toString(), passwordTxt.getText().toString(),
            mLastLocation.getLatitude()+"",mLastLocation.getLongitude()+"",
            AlertDialogManager.todayDate(), new GPSTracker(MainActivity.this).getLocation()+"");
}

private void requestFocus(View view) {
    if (view.requestFocus()) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}
private boolean validateEmpID() {
    if (empIdTxt.getText().toString().trim().isEmpty()) {
        empIdTxt.setError(ErrorUtil.USERNAME_ERROR);
        requestFocus(empIdTxt);
        return false;
    }
    return true;
}

private boolean validatePassword() {
    if (passwordTxt.getText().toString().trim().isEmpty()) {
        passwordTxt.setError(ErrorUtil.PASSWORD_ERROR);
        requestFocus(passwordTxt);
        return false;
    }
    return true;
}

private class MyTextWatcher implements TextWatcher {

    private View view;

    private MyTextWatcher(View view) {
        this.view = view;
    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    public void afterTextChanged(Editable editable) {
        switch (view.getId()) {
            case R.id.et_loginId:
                validateEmpID();
                break;
            case R.id.et_loginPass:
                validatePassword();
                break;
        }
    }
}

@Override
public void updateScreen(String data, String tag) {

    if (tag.compareTo(ApiUtil.TAG_LOGIN) == 0) {
        try {
            System.out.println("Login Response"+data);

            JSONObject mainObj = new JSONObject(data);
            AppDelegate ctrl = AppDelegate.getInstance();

            if (!mainObj.isNull("username")) {
                ctrl.username = mainObj.getString("username");
            }
            if (!mainObj.isNull("password")) {
                ctrl.password = mainObj.getString("password");
            }

   /*         if (!mainObj.isNull("latitude")) {
                ctrl.password = mainObj.getString("latitude");
            }

            if (!mainObj.isNull("longitude")) {
                ctrl.password = mainObj.getString("longitude");
            }

            if (!mainObj.isNull("date_and_time")) {
                ctrl.password = mainObj.getString("date_and_time");
            }

            if (!mainObj.isNull("place")) {
                ctrl.password = mainObj.getString("place");
            }*/

            if (!mainObj.isNull("error")) {
                Toast.makeText(MainActivity.this,"Login Fails",Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this,"Login Success",Toast.LENGTH_SHORT).show();
            }


        } catch (Exception e) {
            Toast.makeText(MainActivity.this,"Seems there is an issue please try again later",Toast.LENGTH_SHORT).show();

        }
    }

}

@Override

public void onLocationChanged(Location location) {

    tv_lat.setText("Latitude"+location.getLatitude());
    tv_long.setText("Longitude"+ location.getLongitude());
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}

@Override
public void onProviderEnabled(String s) {
}

@Override
public void onProviderDisabled(String s) {
}
}

【问题讨论】:

    标签: android latitude-longitude


    【解决方案1】:

    确保您已在清单中授予此权限,并且您的 gps 应打开:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    如果您在棉花糖中测试您的应用程序:

    以编程方式授予权限。

    最后一件事是从您的代码中删除此条件并运行它。它肯定会起作用:

    删除这个:

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
    

    如果您发现它不起作用,我会在Lollipop 上发布我自己的课程,该课程运行良好,请查看:

    public class Google_Map_Current_Location extends FragmentActivity implements LocationListener {
        GoogleMap googleMap;
        Location location;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //show error dialog if GoolglePlayServices not available
            if (!isGooglePlayServicesAvailable()) {
                finish();
            }
            setContentView(R.layout.google_map_current_loction);
            SupportMapFragment supportMapFragment =
                    (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap);
            googleMap = supportMapFragment.getMap();
            try {
                googleMap.setMyLocationEnabled(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                showSettingsAlert();
            }
    
            Criteria criteria = new Criteria();
            String bestProvider = locationManager.getBestProvider(criteria, true);
            try {
                location = locationManager.getLastKnownLocation(bestProvider);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (location != null) {
                onLocationChanged(location);
            }
            try {
                locationManager.requestLocationUpdates(bestProvider, 20000, 0, this);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onLocationChanged(Location location) {
            TextView locationTv = (TextView) findViewById(R.id.latlongLocation);
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            LatLng latLng = new LatLng(latitude, longitude);
            googleMap.addMarker(new MarkerOptions().position(latLng));
            googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
            locationTv.setText("Latitude:" + latitude + ", Longitude:" + longitude);
    
        }
    
        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub
        }
    
        private boolean isGooglePlayServicesAvailable() {
            int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
            if (ConnectionResult.SUCCESS == status) {
                return true;
            } else {
                GooglePlayServicesUtil.getErrorDialog(status, this, 0).show();
                return false;
            }
        }
    
        public void showSettingsAlert() {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    
            // Setting Dialog Title
            alertDialog.setTitle("GPS is settings");
    
            // Setting Dialog Message
            alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
    
            // On pressing Settings button
            alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(intent);
                }
            });
    
            // on pressing cancel button
            alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
    
            // Showing Alert Message
            alertDialog.show();
        }
    

    【讨论】:

    • 如果您不知道如何以编程方式授予权限。写在评论中。我会用权限更新我的答案。
    • 我在清单文件中添加了权限,gps 已打开,我正在 Lollipop 中测试我的应用程序。我已删除条件。但删除此条件后,我收到错误“调用需要权限,这可能是被用户拒绝,代码应显式检查权限是否可用(具有检查权限)或显式处理潜在的“SecurityException”“
    • 我已经解决了这个问题..在我的情况下 getLastKnownLocation() 返回了 null..所以我在 stackoverflow.com/questions/20438627/… 的帮助下解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多