【问题标题】:Switch off GPS programmatically以编程方式关闭 GPS
【发布时间】:2023-12-28 13:54:01
【问题描述】:

我有什么:目前我的应用正在通过 gps 提供位置。

我想要什么: Gps 在我退出应用程序后自动关闭。因为它一次又一次地告诉我位置看起来很奇怪,而且 gps 也消耗大量电池。

【问题讨论】:

标签: android gps


【解决方案1】:

查看上面的评论线程,似乎可以通过编程方式关闭 GPS(但只看到 12 个赞成票)

但如果您以编程方式从您的应用程序中关闭 GPS,如果其他应用程序使用 GPS 服务怎么办?

解决方案就像

打开android的Settings,然后告诉用户在退出应用程序时关闭GPS...

为此,您可以这样做:

Intent i = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(i);

你可以试试

locationManager.removeUpdates(myLocationListener); 
locationManager = null;

此应用的关闭 GPS,但仍可供其他应用使用。

【讨论】:

  • 现在还可以。请看评论帖。
  • 有可能,但是我没有发现任何东西可以相信未来这种可能性的存在
  • @Rasel.... LocationManager.removeUpdates(Listener);是我问题的答案。因为它只会关闭我的应用的 gps。
【解决方案2】:

此代码可以改变您的 gps。但没有记录

 final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3")); 
            sendBroadcast(poke);

【讨论】:

    【解决方案3】:

    尽管 Rasel 发布的链接包含一些可能有效的代码,但您应该记住,该代码正在利用已修复的安全漏洞 (http://code.google.com/p/android/issues/detail?id=7890),因此在不久的将来应该不再有效。

    【讨论】:

    • 所以你的意思是我不应该使用它??
    • @Noman:取决于你想要做什么。如果是个人使用,请继续。如果您想分发您的应用程序,我不会使用它,因为它不能保证工作。
    【解决方案4】:

    如果您想以编程方式启用 GPS,然后将此代码复制并粘贴到您的项目中,它可以正常工作。

          final Intent i = new Intent();
          i.setClassName("com.android.settings","com.android.settings.widget.SettingsAppWidgetProvider"); 
          i.addCategory(Intent.CATEGORY_ALTERNATIVE);
          i.setData(Uri.parse("3")); 
           sendBroadcast(i); //if you are in broad cast receiver activity then use context.sendBroadcast(i)
    

    【讨论】:

    • 现在似乎不适合我,但感谢您的建议。
    • 解决方案和 Rasel 上述解决方案仅适用于 Android 2.3.6 - 不适用于 v3.x.x 或 v4.x.x - 虽然有一些建议表明此漏洞已在 Android 4.1.2 中重新引入,它可能会再次起作用!
    • @Chuong 感谢您提供信息并发表评论。很有帮助