【问题标题】:want to Disable GPS setting through my app想通过我的应用禁用 GPS 设置
【发布时间】:2012-03-20 16:21:05
【问题描述】:

我是 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 来打包.....

我的应用程序崩溃了

ava.lang.SecurityException: Permission denial: 写入安全设置需要 android.permission.WRITE_SECURE_SETTINGS

谢谢提前帮助:)

【问题讨论】:

    标签: android gps


    【解决方案1】:

    您可以使用启动 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);
    

    【讨论】:

    • 感谢 chirag 提供的信息,我可以使用 locationManager.removeUpdates(locationListener);每当我想禁用 GPS 时。
    • 这不会启动或停止 GPS。它只是启用位置更新(假设 GPS 或其他一些位置信息来源可用)resp。禁用位置更新!
    【解决方案2】:

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

    看到这个问题:How can I get the dreaded WRITE_SECURE_SETTINGS permission for my android app?

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

    【讨论】:

    • 谢谢大卫,你的权利,应用程序将无法获得此权限,唯一的禁用方法是用户通过设置菜单,或构建自己的自定义固件
    【解决方案3】:

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

    如果他们在安装应用程序时不显示该消息,您必须删除:

    <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;
    

    }

    【讨论】:

    • 感谢 Rafael,我希望在应用程序中定期(每 30 分钟)定位一次,希望在获得位置后将 GPS 设置恢复为原始设置以节省电量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多