聆听位置和方向的变化

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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)的位置变化。希望这会有所帮助。

以上是关于聆听位置和方向的变化的主要内容,如果未能解决你的问题,请参考以下文章

当 ipad 中的方向发生两次变化时,UIScrollView 的位置会发生变化

Android在方向上保存视图位置已更改[重复]

iOS mapKit在用户当前位置更新时刷新方向

php图片加字将字旋转位置

屏幕旋转的处理方法,实现视图位置的变化

iPad - 方向变化和视图?