Android 倾听位置和方向的变化

Android 倾听位置和方向的变化,android,location,orientation,event-listener,Android,Location,Orientation,Event Listener,我正在构思一款android应用程序,但它需要我倾听位置和方向的变化 基本上,我想知道是否有人朝向某个点,这需要我找到手机的方向。然而,我还想跟踪位置的变化,因为我想知道用户离这一点是近还是远。 我对位置侦听器进行了排序,这样我就可以根据数据库中的许多存储点查找位置 我现在该如何同时倾听方向的变化呢?是否可以在同一活动中实现两个侦听器 所谓方向变化,我指的是用户面对的方向的变化,而不是手机方向的变化,如横向或纵向。因此,我希望监视onSensorChanged并检索方位角,以便您可以使用OnCo

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

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

我现在该如何同时倾听方向的变化呢?是否可以在同一活动中实现两个侦听器


所谓方向变化,我指的是用户面对的方向的变化,而不是手机方向的变化,如横向或纵向。因此,我希望监视onSensorChanged并检索方位角,以便您可以使用
OnConfiguration Changed()

并在清单中为
活动添加一些
configChanges

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

您的需求分为两部分:

首先是方向更改,在
AndroidManifest.xml
中,注册
活动的方向配置更改

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">
<activity android:name=".YourActivity"
          android:configChanges="orientation">
第二部分,位置更改,将您的
活动注册为
LocationListener
,并实施
onLocationChanged
方法:

@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);
    }
@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);
        }

    }

希望这能有所帮助。

我对我的问题做了一些编辑,我指的是用户的方向,而不是横向/纵向。我的问题是如何实现上述位置监听器以及传感器监听器以获得方位角。是的,您可以在相同的
活动中实现任意多个
监听器
,我不确定
onSensorChanged
,但您可以自己尝试,但关于位置,正如我上面的回答,通过更改传入的变量,您可以每秒(1000ms)或每米(1)收听位置更改。希望这有帮助。