如何以编程方式启用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"
。