我正在研究一个 android 应用程序的想法,但它需要我监听位置变化和方向变化。
基本上我想知道是否有人面向某个点,这需要我找到手机的方向。但是,我也想跟踪位置变化,因为我想知道用户是离这一点更近还是更远。我已对位置侦听器进行了排序,因此我可以根据数据库中的许多存储点来查找位置。
我现在如何同时监听方向变化?是否可以在同一个活动中实现 2 个侦听器。
方向变化是指用户面向的方向的变化,而不是手机方向的变化,例如横向或纵向。所以我会想要监控 onSensorChanged 并检索方位角
我正在研究一个 android 应用程序的想法,但它需要我监听位置变化和方向变化。
基本上我想知道是否有人面向某个点,这需要我找到手机的方向。但是,我也想跟踪位置变化,因为我想知道用户是离这一点更近还是更远。我已对位置侦听器进行了排序,因此我可以根据数据库中的许多存储点来查找位置。
我现在如何同时监听方向变化?是否可以在同一个活动中实现 2 个侦听器。
方向变化是指用户面向的方向的变化,而不是手机方向的变化,例如横向或纵向。所以我会想要监控 onSensorChanged 并检索方位角
对于聆听方向的变化,您可以使用onConfigurationChanged()
configChanges
并在清单中添加一些activity
:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
您的要求分为两部分:
首先是方向更改,在 中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);
}
}
希望这可以帮助。