ICS Android以编程方式启用gps?

Posted

技术标签:

【中文标题】ICS Android以编程方式启用gps?【英文标题】:ICS Android enable gps programmatically? 【发布时间】:2012-05-05 09:12:47 【问题描述】:

我知道这个问题在这里被问了很多,但我只是想知道自从 ICS 发布以来,有没有办法以编程方式启用 gps?

我正在尝试启用 gps 并将设备的位置发送到电子邮件,应用程序将在收到短信时启动。

【问题讨论】:

【参考方案1】:

有没有办法以编程方式启用 gps?

我希望不会,因为那将是隐私缺陷。 AFAIK,所有允许恶意软件以编程方式启用 GPS 的已知漏洞现已关闭。

我正在尝试启用 gps 并将设备的位置发送到电子邮件

用户控制是否启用 GPS。

【讨论】:

如果是这种情况,有没有办法在启用gps后立即在后台运行功能? 嗯,有GpsStatus.ListenerLocationListener 中的三个状态方法。 嗯,这可能是一种解决方法......我会看看,谢谢 Oct【参考方案2】:

正如马克所说,我当然希望不是因为打开用户想要关闭的东西肯定不是一件好事;-)

你当然可以要求用户这样做(你可能已经找到了,但这里是一种从记忆中完成的简单方法)

LocationManager L = (LocationManager) getSystemService(LOCATION_SERVICE); 

if (!L.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
     Intent I = new Intent( 
                android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
        startActivity(I);  

【讨论】:

哈哈是的......但我认为小偷不会按照我的指示启用gps @HeWhoProtects Ok so 用例:手机被盗,用户发送短信,小偷很聪明,关闭 GPS 但不关闭短信。小偷总是可以擦除应用程序的手机,在这种情况下你无能为力。我认为你在绕过一个可能有点精明但不太精明的典型小偷的正确轨道上,只需让服务接受短信,如果 gps 使用检测方法关闭,则在重新打开时查询 gps ping。 现在就是这样,我要学习如何推送通知和替换短信,它不需要处于被盗情况,丢失手机或其他东西【参考方案3】:

要让用户启​​用 GPS,请查看link

下面将是一个函数的内部结构,该函数试图按精度降序获取最后一个已知的 GPS 位置。如果用户没有启用 GPS,则无法启用它。您能做的最好的事情就是获取最后一个已知位置,或提示他们启用 GPS。每次用户在另一个应用程序中使用 GPS 并获得新坐标,或连接到无线网络时,最后一个已知位置都会改变。我想您可以编写一个后台服务,每 5-10 分钟轮询一次这些数据并将其发送给您。虽然,我不同意您似乎正在使用此应用程序的方向。哈哈。为了科学!

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_FINE); String provider = lm.getBestProvider(crit, true); 
Location loc = lm.getLastKnownLocation(provider);

if(loc)
    return loc;

lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_COARSE); 
provider = lm.getBestProvider(crit, true); 
loc = lm.getLastKnownLocation(provider);

if(loc)
    return loc;

lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
crit = new Criteria(); 
crit.setAccuracy(Criteria.NO_REQUIREMENT); 
provider = lm.getBestProvider(crit, true); 
loc = lm.getLastKnownLocation(provider);
return null;

【讨论】:

我的“方向”的哪一部分你不同意哈哈?我仍然是Android开发的菜鸟,所以如果有更好的做事方式,我对批评持开放态度:D 从问题来看,您似乎正在实施一个跟踪应用程序。您只是想使用 GPS 还是想在用户不知情的情况下离散地获取 GPS 信息? (例如:不使用 gps 权限) 不,我的应用程序不是出于恶意,我正在创建一个跟踪服务,如果用户丢失了手机,他们可以登录我的网站并向他们自己的手机发送推送通知以发送gps 信号,播放警报声(如果手机处于静音状态)等... helloandroid.com/tutorials/… 可能就是您正在寻找的内容。【参考方案4】:

您必须向用户请求权限:

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

【讨论】:

以上是关于ICS Android以编程方式启用gps?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在Android上以编程方式启用或禁用GPS?

如何在Android 6.x上以编程方式启用或禁用GPS?

像 Ola Cabs Android 应用程序一样以编程方式打开 GPS

谷歌地图以编程方式启用 GPS?

以编程方式启用 gps 的问题