【问题标题】:Listen for location and orientation changes聆听位置和方向的变化
【发布时间】:2013-08-21 22:46:48
【问题描述】:

我正在构思一个 android 应用程序,但它需要我监听位置变化和方向变化。

基本上我想知道是否有人面向某个点,这需要我找到手机的方向。但是,我还想跟踪位置变化,因为我想知道用户是离这一点更近还是更远。 我已对位置侦听器进行了排序,因此我可以根据数据库中存储的一些点来查找位置。

我现在如何同时监听方向变化?是否可以在同一个活动中实现 2 个侦听器。

我所说的方向变化是指用户面向的方向的变化,而不是手机方向的变化,例如横向或纵向。所以我会想要监控 onSensorChanged 并检索方位角

【问题讨论】:

    标签: android location orientation event-listener


    【解决方案1】:

    对于聆听方向的改变,您可以使用onConfigurationChanged()

    并在您的清单中为activity 添加一些configChanges

    <activity android:name=".MyActivity"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name">
    

    【讨论】:

      【解决方案2】:

      您的需求分为两部分:

      首先是方向变化,在AndroidManifest.xml中,为你的Activity注册方向的配置变化:

      <activity android:name=".YourActivity"
                android:configChanges="orientation">
      

      YourActivity 中,覆盖onConfigurationChanged 方法:

      @Override
          public void onConfigurationChanged(Configuration newConfig) {
              if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
                  // Do your stuffs here as LANDSCAPE mode
              }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
                  //Do your stuffs here as PORTRAIT mode
              }
              super.onConfigurationChanged(newConfig);
          }
      

      第二部分,位置变更,将你的Activity注册为LocationListener并实现onLocationChanged方法:

      @Override
          public void onLocationChanged(Location loc) {
              // Location changed as loc, do things here
          }
      

      在你的onCreate:

      LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
          if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
              Log.d(TAG, "GPS is enabled");
              GPSListener = new MyLocationListener("GPS");
              manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000,
                      1, this);
          } else {
              if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                  Log.d(TAG, "NETWORK is enabled");
                  NetworkListener = new MyLocationListener("NETWORK");
                  manager.requestLocationUpdates(
                          LocationManager.NETWORK_PROVIDER, 1000, 1, this);
              }
      
          }
      

      希望这会有所帮助。

      【讨论】:

      • 我稍微编辑了我的问题,我的意思是用户的方向,而不是横向/纵向的手机方向。我的问题是我将如何实现如上所述的位置监听器,以及传感器监听器来获取方位角。
      • 是的,您可以在同一个Activity 中实现任意数量的Listener,我不确定onSensorChanged 但您可以自己尝试,但是关于位置,正如我上面的回答,您可以通过更改传入的变量来聆听每秒(1000ms)或每米(1)的位置变化。希望这会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多