我知道这个问题在这里被问了很多,但只是想知道自从 ICS 发布以来,有没有办法以编程方式启用 gps?
我正在尝试启用 gps 并将设备的位置发送到电子邮件,应用程序将在收到短信时启动。
有没有办法以编程方式启用gps?
我希望不会,因为那将是一个隐私缺陷。AFAIK,所有允许恶意软件以编程方式启用 GPS 的已知漏洞现已关闭。
我正在尝试启用 gps 并将设备的位置发送到电子邮件
用户控制是否启用 GPS。
正如马克所说,我当然希望不是因为打开用户想要关闭的东西肯定不是一件好事;-)
当然,您可以要求用户这样做(您可能已经找到了,但这里的参考是一种从记忆中做到这一点的简单方法)
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,请查看此链接
下面是一个函数的内部结构,该函数试图按精度降序获取最后一个已知的 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;
您必须向用户询问权限:
Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);