繁体   English   中英

用户的Android GPS位置

[英]Android GPS Location of the User

我需要获取我的应用的“用户位置”,以便可以在基于“纬度”和“纬度”两个位置的Google Maps上显示路线。

如果关闭了用户GPS,则应询问用户是否要打开GPS,并应该能够接受设置以将其打开。

我正在尝试以下操作,但它直接将我带到设置,我想知道如何让用户询问他是否要被带走。

是否有任何图书馆可以有效地做到这一点,我更喜欢使用它来获取用户的纬度和经度。

如果您要询问如何询问用户是否对导航到设置页面感兴趣,为了打开位置服务,我建议您仅显示一个对话框。 这是我的项目中的一个示例:

// Presents dialog screen - location services
private void askLocationDialog(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

    alertDialogBuilder.setTitle(R.string.snoox_use_location_services_dialog);

    // set dialog message
    alertDialogBuilder.setMessage(R.string.would_you_like_to_turn_your_location_services_on_)
    .setCancelable(false)
    .setPositiveButton(R.string.ok,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            // opens the setting android screen
            Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(settingsIntent);
        }
    })
    .setNegativeButton(R.string.no,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            dialog.cancel();
        }
    });

    // create alert dialog
    alertDialogBuilder.create().show();
}

如果您对一个完整的示例感兴趣,我认为这篇文章很有帮助: 如何确定是否启用了Android设备的GPS

您将需要做几件事。

首先,要整合Google Maps,请在此处获得完整的参考。

简单的步骤:

1按照以下步骤在这里 :这将有助于增加一个简单的谷歌地图到你的屏幕。

2为了能够获取自己的位置,您将需要在android中使用LocationListener和LocationManager。 为此,首先在您的活动中实现 LocationListener。

public class LocationActivity extends Activity implements LocationListener

3然后,您需要在onCreate()方法中实例化一些设置。

     @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Get the location manager
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the provider
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    // Initialize the location fields
    if (location != null) {
      System.out.println("Provider " + provider + " has been selected.");
      onLocationChanged(location);
    } 
  }

4您需要能够请求常规位置更新。 将此包含在onResume()方法中。

@Override
  protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(provider, 400, 1, this);
  }

5如果应用程序进入暂停周期,则不需要进行这些更新。

@Override
  protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
  }

6您从步骤2开始的位置侦听器实现要求您有一个onLocationChanged侦听器,并将其实现:

@Override   
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
}

7添加这两种方法以通知您的位置设置提供商-GPS或网络。

public void onProviderDisabled(String arg0) {
    Toast.makeText(this, "Disabled provider " + provider,
                Toast.LENGTH_SHORT).show();
}

public void onProviderEnabled(String arg0) {
    Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();
}

8现在,我们需要将其链接到您的Google地图。 我将向您展示一个使用google maps API来生成市场以显示您当前位置的示例。 可以从API推断其他用法。

首先在您的代码中创建私有字段:

private GoogleMap mMap;
Marker m;

9将它们添加到onCreate方法中-这将默认标记位置实例化为0,0纬度和经度。

mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                .getMap();
m = mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0))
                .title("Position"));

10在您的onLocationChanged方法中,我们需要在位置更改时刷新此标记。 因此添加:

m.setPosition(new LatLng(lat, lng));
m.setTitle("Your Position");

// Move the camera instantly to marker with a zoom
// of 15.
                            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 15));

这将是一种使用位置更新标记的简单方法,并且应该是android中的Google Maps和location API的良好介绍。

要检测GPS是否打开,可以使用@Dror提供的答案:)希望它能有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM