11

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

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

4

4 回答 4

11

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

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

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

用户控制是否启用 GPS。

于 2012-04-24T17:27:43.183 回答
4

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

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

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);  
}
于 2012-04-24T17:43:47.533 回答
3

要让用户启​​用 GPS,请查看此链接

下面是一个函数的内部结构,该函数试图按精度降序获取最后一个已知的 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;
于 2012-04-24T18:04:47.233 回答
0

您必须向用户询问权限:

Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(gpsOptionsIntent);
于 2015-12-04T04:04:04.447 回答