求一种普遍可以用的GPS打开的方法?
//好像不能用,提示权限不够,加上也不行
public void setGpsState()
{
// 打开GPS
Settings.Secure.setLocationProviderEnabled(getContentResolver(),
LocationManager.GPS_PROVIDER, true);
}
网上说是需要root或程序安装到System/app
private void setGpsState2()
{
Intent gpsIntent = new Intent();
gpsIntent.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
gpsIntent.setData(Uri.parse("custom:3"));
try
{
PendingIntent.getBroadcast(this, 0, gpsIntent, 0).send();
}
catch (CanceledException e)
{
e.printStackTrace();
}
}
这种好像2.2以上不可以用
求一种普遍适用的方法 ,谢谢
android GPS
------解决方案--------------------
请参考如下
不在Launcher中实现
这种方案关键在于对数据库值settings.secure.device_provisioned进行监听,如果发现该值被设置,即可执行我们的代码。
对该值进行监听,首先要响应android.intent.action.BOOT_COMPLETED广播,也就是当系统完成启动后就执行。系统启动完成后执行什么动作?要执行对数据库相应值的监听,具体说就是要注册一个observer,对settings.secure.device_provisioned进行监听,具体代码如下:
context.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(Settings.Secure.DEVICE_PROVISIONED), true, gpsObserver);
对数据库值注册监听后,在响应方法里,以上面代码为例,就是gpsObserver中,增加对数据库值的设置即可:
private ContentObserver gpsObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
if (Settings.Secure.getInt(conText.getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 0) != 0) {
Settings.Secure.setLocationProviderEnabled(conText.getContentResolver(), LocationManager.NETWORK_PROVIDER, false);
Settings.Secure.setLocationProviderEnabled(conText.getContentResolver(), LocationManager.GPS_PROVIDER, false);
Intent i = new Intent(ACTION_SET_USE_LOCATION_FOR_SERVICES);
i.setFlags(i.getFlags()
------解决方案--------------------
Intent.FLAG_ACTIVITY_NEW_TASK
------解决方案--------------------
Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra(EXTRA_DISABLE_USE_LOCATION_FOR_SERVICES, true);
conText.startActivity(i);
}
}
}