- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序在 Ice Cream Sandwich 中运行得非常好,但现在我在 KitKat 上试用它并遇到了一些问题。
该应用程序是我在旧手机上运行的一种服务器,它会在请求时提供位置信息。在 ICS 中,当请求位置时,GPS 图标开始闪烁,应用程序很快就会收到位置更新并将其发送出去。但现在有了 KitKat,GPS 图标在请求位置时不会开始闪烁。该应用程序提供 60 秒的时间来查找 GPS 位置,但通常 GPS 在此期间甚至没有激活。 GPS 仍然时不时地突然自动激活(在 60 年代),并且位置信息会提供给我的应用程序。
为什么即使我的应用程序请求位置,GPS 也没有激活? 如上所述,我的应用可以毫无问题地使用 ICS。而且我的 list 中确实设置了所需的权限。
公共(public)变量:
public static LocationManager mlocManager = null;
public static LocationListener mlocListener_fast = null;
创建时:
mlocListener_fast = new MyLocationListener();
mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
处理用户请求的命令(位置请求)
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener_fast);
我应该采取哪些不同的措施来立即获取 GPS 位置,而无需等待突然的位置更新/GPS 激活(可能由 Android 或其他应用程序触发)?不幸的是,我没有任何其他 Android 设备可以尝试这个。
编辑:
似乎如果应用程序在启动时不请求位置,那么每次请求时位置请求都会起作用。但是,如果在启动时请求(并接收到)位置,则位置请求不再有效。是什么原因造成的?我使用完全相同的行(相同的位置管理器和相同的位置监听器)在启动时和稍后请求时进行位置请求。
即使启动时使用的位置监听器与后来使用的不同,位置请求也不再起作用。甚至在再次请求位置之前再次尝试初始化位置管理器,但没有帮助。这是怎么回事??
编辑2:
似乎使用 KitKat 无法请求多个位置请求。我曾经有多个用于不同目的的位置监听器。例如,一个用于每小时更新一次位置,另一个用于立即获取位置(用户请求更新)。现在看来,如果我让 1/60 分钟位置监听器正常运行,那么 KitKat 位置管理器将无法处理即时位置请求。有人遇到过这个问题吗?最好知道哪些 Android 版本存在此问题。
最佳答案
此问题的解决方法是仅使用一个 LocationManager 和一个 LocationListener。如果您的应用程序需要不同类型的同时位置请求(具有不同的参数),那么您需要实现一个“位置请求处理程序”,它决定哪些参数应该用于位置请求,即哪些参数对位置有最严格的要求。
这是一个简单的示例代码,解释了“位置请求处理程序”的概念:
class LR {
long lock_min_time; // defined in set_lock_lr before using
float lock_min_dist;
boolean lock_active = false;
long idle_min_time = 3600000; // 1 per hour
float idle_min_dist = 200;
boolean idle_active = true;
long fast_min_time = 0;
float fast_min_dist = 0;
boolean fast_active = false;
//constructor
public LR()
{}
public void set_lock_lr(long min_time, float min_dist, boolean active)
{
lock_active = active;
lock_min_dist = min_dist;
lock_min_time = min_time;
System.out.println("LR lock set: "+min_time+", "+min_dist+", "+active);
update_location_request();
}
public void set_idle_lr(boolean active)
{
idle_active = active;
System.out.println("LR idle set: "+active);
update_location_request();
}
public void set_fast_lr(boolean active)
{
fast_active = active;
System.out.println("LR fast set: "+active);
update_location_request();
}
private void update_location_request()
{
// Remove current location request
mlocManager_basic.removeUpdates(mlocListener_basic);
if(fast_active)
{
mlocManager_basic.requestLocationUpdates(LocationManager.GPS_PROVIDER, fast_min_time, fast_min_dist, mlocListener_basic);
System.out.println("LR: fast_active");
}
else if(lock_active)
{
mlocManager_basic.requestLocationUpdates(LocationManager.GPS_PROVIDER, lock_min_time, lock_min_dist, mlocListener_basic);
System.out.println("LR: lock_active");
}
else if(idle_active) // only idle updates
{
mlocManager_basic.requestLocationUpdates(LocationManager.GPS_PROVIDER, idle_min_time, idle_min_dist, mlocListener_basic);
System.out.println("LR: idle_active");
}
}
}
关于Android LocationManager requestLocationUpdates 改变了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34369890/
我正在发送纬度、经度和位置名称以保存在服务器上....问题是当我第一次运行我的应用程序时它正常并保存以上数据一次...当我关闭我的应用程序并且模拟器正在运行时并且 eclipse 也再次启动我的应用程
RequestLocationUpdates 是 LocationManager 的一个方法,周期性接收 GPS 信息。 我认为如果我从 onCreate 应用程序发送应该不会有问题,因为它不会对主线
我正在尝试从 2 个不同的提供商处获取位置信息:网络和 GPS。 我在 requestLocationUpdates 中使用 minTime 1 分钟和 minDistance 300 米。使用这些参
您好,我正在尝试从 UI 线程以外的线程请求位置更新,我在以下行中得到一个 RuntimeExeption: // request location updates using Cellular lm
我是 Android 和 Xamarin 世界的新手。我正在尝试为位置管理器创建一个单独的类以用于不同的 Activity 。这是我的代码 using System; using Android.Co
在我的 Android 应用程序中,我使用 GoogleApiClient 来处理位置服务。当我按以下方式调用 requestLocationUpdates() 时一切正常: locationProv
使用带有 requestLocationUpdates() 的位置管理器对象与仅使用 LocationListener 有什么区别?他们都做同样的事情并且以同样的方式工作吗?一个比另一个有什么优势?
我有一个严重的问题。在 Android 中调用 requestLocationUpdates 函数时,GPS 会监听当前位置。但如果手机在室内(比如地下),则 GPS 将继续监听,直到固定位置。 这会
我试图通过 Android 中的 GPS 定期获取用户位置并将数据发送到远程数据库,但我得到异常:无法在未调用 Looper.prepare 的线程内创建处理程序( )。 检索位置的方法在远程服务中,
我在我的应用程序中使用教程等中的以下代码,以从 GPS(或者如果 GPS 未打开,则网络)获取最佳位置修复,然后我将其显示在文本字段中。 crit = new Criteria(); context
我只需要一次 GPS 中的实际位置。在此代码中,永远不会调用 onLocationChanged,我不明白为什么。正如我所说: mLocationManager.requestLocationUpda
抱歉,我知道这里发生了这样的问题,但我无法在我的代码中解决它们,我是初学者......因此,我试图从 LocationManager 读取 GPS 坐标,但我的代码抛出“无法在未调用 Looper.p
我有一个获取 GPS 坐标的简单类 GPSListener: public class GPSListener implements LocationListener { public static
这就是 requestLocationUpdates 的样子(我使用它的方式): requestLocationUpdates(String provider, long minTime, float
我需要将 requestLocationUpdates() 放在一个单独的线程中,以免它阻塞我应用程序的其余部分(它将在大部分时间运行)。最好的方法是什么? 最佳答案 当您调用 requestLoca
如何更新时间和距离间隔,或者以不同的间隔再次调用 requestLocationUpdates? 我的代码: LocationManager locationManager = (LocationMa
(这是关于android中的LocationManager类) 是否有一种使用requestLocationUpdates 的方法,但在某种程度上允许它每次都为我提供最佳 Activity 提供者的结
请告诉我一件事 这是请求位置更新的两种变体 Criteria mFineCriteria = new Criteria(); mFineCriteria.setAccuracy(Criteria.AC
我只有一台设备 (HTC HD Deside) 用于测试我的应用程序以及何时需要使用 locationManager.requestLocationUpdate(criteria,0,0,this);
从 LocationManager 调用 requestLocationUpdates 是否会更新 getLastLocation 返回的位置? 即,我可以这样做吗: 调用 getLastLocati
我是一名优秀的程序员,十分优秀!