我知道这个问题在这里被问了很多,但是自从ICS发布以来,只是想知道,有没有办法以编程方式启用gps?
我正在尝试启用gps并将设备的位置发送到电子邮件,应用程序将在收到短信时启动。
答案 0 :(得分:11)
有没有办法以编程方式启用gps?
我希望不会,因为这将是一个隐私缺陷。 AFAIK,允许恶意软件以编程方式启用GPS的所有已知漏洞现已关闭。
我正在尝试启用gps并将设备的位置发送到电子邮件
用户控制是否启用GPS。
答案 1 :(得分: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);
}
答案 2 :(得分: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;
答案 3 :(得分:0)
您必须要求用户提供权限:
Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);