如何以编程方式启用Android Cupcake中的GPS

我目前正在编写一个Android应用程序,与GPS一起工作。 目前,我能够确定GPS是否启用。 我的问题是,我想要启用应用程序启动时的GPS,如果它被禁用。 我怎样才能做这个programmaticaly?

你不能,从Android 1.5开始。 您可以做的最多的是popup打开活动,以允许用户打开/closures它。 使用android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS的操作来制作一个意图来打开这个活动。

 if(!LocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER )) { Intent myIntent = new Intent( Settings.ACTION_SECURITY_SETTINGS ); startActivity(myIntent); } 

这个方法代码可以帮你

 private void turnGPSOnOff(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.contains("gps")){ final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("3")); sendBroadcast(poke); //Toast.makeText(this, "Your GPS is Enabled",Toast.LENGTH_SHORT).show(); } } 

您可以使用以下内容:

 try { Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true); } catch (Exception e) { logger.log(Log.ERROR, e, e.getMessage()); } 

但只有具有系统签名保护级别才能使用。 所以你需要烹饪自己的图像来实际使用它:/

首先检查位置服务是否已经打开?

检查位置服务是否启用

 public boolean isLocationServiceEnabled(){ LocationManager locationManager = null; boolean gps_enabled= false,network_enabled = false; if(locationManager ==null) locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); try{ gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); }catch(Exception ex){ //do nothing... } try{ network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); }catch(Exception ex){ //do nothing... } return gps_enabled || network_enabled; } 

然后终于打开,如果位置服务在以前closures

  if (isLocationServiceEnabled())) { //DO what you need... } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Seems Like location service is off, Enable this to show map") .setPositiveButton("YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } }).setNegativeButton("NO THANKS", null).create().show(); } 

您应该在Play服务中使用“ 位置设置”对话框 ,只需单击一次即可提示用户启用位置服务(如有必要)。

如果你的问题是在Android的用户级别,这些属性位于: "Settings -> Location -> Use wireless networks" -> "Settings -> Location -> Use GPS satellites"

但在开发人员可以使用适当的权限类"android.provider.Settings.Secure"