jjzjj

java - 在新手机上重新启动之前,Android GPS 无法工作

coder 2023-12-11 原文

我以前发过这个问题,发现其他几个人也有同样的问题,但没有找到解决方案。

我正在开发一个 Android 应用程序,它使用获取的 GPS 坐标和地理编码的邮政编码向服务器提交 JSON 查询。对于从未下载过该应用程序的全新用户,GPS 根本不起作用。直到重新启动手机,GPS 才会工作。安装应用程序并重新启动后,GPS 每次都会正常工作,即使再次重新启动也是如此。

关于这个问题的信息很少,我发现的唯一问题是关于使用 Google Play 位置服务,没有更多细节。其他人遇到过这个问题吗?在解决此问题之前,我的开发完全停止。


编辑: 这是 MainActivity.java 的链接调用地理定位函数的文件。

这是 MyLocation.java 的链接包含多个地理定位源的实际逻辑的文件

我毫不怀疑有更好的 GPS 方法。我是 Android 开发的新手,所以非常感谢这方面的任何帮助。

编辑 2: 我已经通过恢复出厂设置删除手机,然后从头开始。我仍然无法在此设备上重现该问题,只能在重启前首次使用该应用程序的手机上重现。

最佳答案

看起来您正在注册 GPS 和 NETWORK 提供商以监听 10 秒的位置,当计时器在 10 秒后关闭时您尝试从这两个提供商获取最新位置。

这里发生了一些事情。

首先,您似乎在用错误的方法监听更新。你的两个听众应该是这样的:

    LocationListener locationListenerGps = new LocationListener() {

            // This will never be called, its not part of the LocationListener interface - http://developer.android.com/reference/android/location/LocationListener.html
            /* public void onStatusChanged(Location location) {
                    timer1.cancel();

                    locationResult.gotLocation(location);
                    lm.removeUpdates(this);
                    lm.removeUpdates(locationListenerNetwork);
            } */
            public void onProviderEnabled(String provider) {}
            public void onProviderDisabled(String provider) {}
            public void onLocationChanged(Location location) {
                    // This is the correct method to receive location callbacks
                    timer1.cancel();

                    locationResult.gotLocation(location);
                    lm.removeUpdates(this);
                    lm.removeUpdates(locationListenerNetwork);

            }
            public void onStatusChanged(String provider, int status, Bundle extras) {}
    };

其次,我会使用 ScheduledThreadPoolExecutorHandler而不是 Timer .

来自 Timer 文档:

Prefer ScheduledThreadPoolExecutor for new code...This class does not offer guarantees about the real-time nature of task scheduling.

如果需要重启才能让应用正常运行,这可能与定时器在 10 秒后未触发​​有关。请注意,这并不一定意味着 GPS 本身不工作。

Handler 应该可以完成这项工作,它是为 Android 设计的,所以我建议使用它。看起来像:

Handler handler = new Handler();
handler.postDelayed(getLastLocation, 10000);

...并且您的 GetLastLocation 将更改为:

Runnable getLastLocation = new Runnable() {
    @Override
    public void run() {
        ...
    }
}

...您的cancel() 和其他方法需要引用处理程序。

另外,请注意,您在 MainActivity 中使用 NETWORK_PROVIDER 提供者类型声明 Location 对象,然后在该对象中设置纬度/经度。

public Location mUserCoordinates = new Location(LocationManager.NETWORK_PROVIDER);

因此,无论实际来源如何,MainActivity 中的位置类型始终显示为 NETWORK_PROVIDER

此外,看起来您的 MainActivity 不需要实现 LocationListener,因为它从未在 LocationManager 中注册过。

最后,我建议使用 Google Play 服务中的 Fused 位置提供程序,而不是使用两个监听器用于 GPS 和网络,如下所述: http://developer.android.com/training/location/receive-location-updates.html

您将仅限于安装了 Google Play 服务的 Android 2.2 及更高版本的设备,但在我看来,避免处理平台中的一些位置异常和管理多个提供商是值得的。有关 Fused 位置提供程序的更多信息以及它与直接监听 GPS 和网络提供程序的区别,请参阅此 2013 Google I/O presentation - Beyond the Blue Dot: New Features in Android Location

关于java - 在新手机上重新启动之前,Android GPS 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21975117/

有关java - 在新手机上重新启动之前,Android GPS 无法工作的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  10. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

随机推荐