2014-09-11 86 views
0

我想在android中以編程方式打開和關閉gps。想要在android中以編程方式更改gps或位置服務設置?

我嘗試使用

boolean provider = Settings.Secure.putInt(this.getContentResolver(),Settings.Secure.LOCATION_PROVIDERS_ALLOWED, 1); 

,但它需要一個許可"WRITE_SECURE_SETTINGS",當我用此權限它給我,只有系統的應用程序可以使用該權限寫入系統設置錯誤。

請告訴我如何以編程方式更改設置。

我可以通過編程方式更改位置服務嗎?

回答

0

請使用這個類:

public class GpsConnectionManager { 

     @SuppressWarnings("deprecation") 
     public void turnGPSOn(Context context) { 
       Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE"); 
       intent.putExtra("enabled", true); 
       context.sendBroadcast(intent); 

       String provider = Settings.Secure.getString(context.getContentResolver(), 
           Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
       if (!provider.contains("gps")) { // if gps is disabled 
         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")); 
         context.sendBroadcast(poke); 

       } 
     } 


     public void turnGPSOff(Context context) { 
       Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE"); 
       intent.putExtra("enabled", false); 
       context.sendBroadcast(intent); 
       // String provider = 
       // Settings.Secure.getString(this.getContentResolver(), 
       // Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
       // if (provider.contains("gps")) { // if gps is enabled 
       // 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")); 
       // this.sendBroadcast(poke); 
       // } 
     } 
} 

,並使用這些權限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

和奇巧它不會工作

+0

您的類參考示例這可以作爲參考傳遞 – 2014-09-11 10:01:08

0

此前Android版本4.4。您無法以編程方式打開或關閉gps。您的遺囑將從Kitkat版本中啓動此異常java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.location.GPS_ENABLED_CHANGE

您無法以編程方式訪問GPS。

0

你根本無法從Android 1.5開始。但您可以將用戶重定向到位置設置:

Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
相關問題