自从我将设备升级到Android 6.0.1 Marshmallow后,Android会自动将位置模式设置为高精度,当具有android.permission.ACCESS_FINE_LOCATION
权限的应用尝试访问时我的设备的位置。
就我个人而言,我发现将位置模式设置为高精度非常烦人,因此我的设备的电池耗电率非常高。因此,我需要立即检查位置模式是否已更改并手动将其更改回省电模式。
所以,我决定制作一个应用程序,在背景中部署IntentService
,如果位置模式已更改为高精度,则每隔30分钟检查一次1}} strong>并将其更改回省电。
但是,这样做的问题是找到一种让我以编程方式更改位置模式的方法。
我尝试使用以下代码但没有任何用处:
public void ChangeLocationMode() {
LocationRequest mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(SetLocationModeService.this, "Location Mode Changed!", Toast.LENGTH_LONG).show();
}
});
}
我还在AndroidManifest.xml
中添加了以下权限:
<uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
但是,这种方法似乎根本不起作用。
所以,我的问题是,
有没有办法在Android Marshmallow(或更高版本)中以编程方式更改位置模式?
如果有任何经过试验和测试的方法,请考虑在此分享。