想通过我的应用程序禁用GPS设置

时间:2012-03-20 16:21:05

标签: android gps

我是Android编程的新手,非常需要你的帮助。

我试图通过代码禁用GPS Settings.Secure.setLocationProviderEnabled(getContentResolver(),LocationManager.GPS_PROVIDER,false);

还将AndroidManifest.xml文件中的权限设置为

。 。 。

<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 
 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> 
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

但在我运行应用程序时,它说 不授予android.permission.WRITE_SECURE_SETTINGS权限以包..... [/ p>

我的应用程序崩溃说

ava.lang.SecurityException:权限拒绝:写入安全设置需要android.permission.WRITE_SECURE_SETTINGS

提前获得帮助:)

3 个答案:

答案 0 :(得分:0)

您可以使用

启动GPS
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new CTLocationListener();
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1.0f, locationListener);

停止使用gps提供程序

 locationManager.removeUpdates(locationListener);

答案 1 :(得分:0)

如果你试图实际禁用GPS芯片,那么我对android系统的理解是这是不可能的。您必须通过设置菜单要求用户启用或禁用GPS。

请参阅此问题:How can I get the dreaded WRITE_SECURE_SETTINGS permission for my android app?

过去有可能和系统级应用程序可以使用该权限,普通应用程序无法利用它。

答案 2 :(得分:0)

我猜您的用户抱怨您的应用可以看到他们的位置。

要在安装应用时不显示该消息,您必须删除:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

您也可以尝试使用getLastKnownLocation以节省电量。它不会打开GPS并可能使用网络单元数据(COARSE_LOCATION)。

public Location getLocation() {
 if (contextReference == null) {
   return null;
 } 

 Context context = contextReference.get();
 if (context == null) {
   return null;
 }

 Location location = null;

 if (context
    .checkCallingOrSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  LocationManager lm = (LocationManager) context
      .getSystemService(Context.LOCATION_SERVICE);
  location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} else if (context
    .checkCallingOrSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
  LocationManager lm = (LocationManager) context
      .getSystemService(Context.LOCATION_SERVICE);
  location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
return location;

}