在一个service里要删除连接过的wifi配置,所以需要执行获取网络配置的方法wifiManager.getConfiguredNetworks();
但是在lint检查时无法通过,因为查看getConfiguredNetworks的定义,这个方法需要明确的权限检查和申请,
疑惑:这个操作在service里,然后权限申请需要Activity对象,就需要在service里获取绑定service的activity
private List<WifiConfiguration> getWifiConfiguration(){
/*需要明确的动态权限申请,每次调用都需要检查,不然lint检查不过,故将其封装*/
if (!(ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED)) {
ActivityCompat.requestPermissions(mActivity, new String[] {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_WIFI_STATE}, 9999);
}
List<WifiConfiguration> wifiConfigList = wifiManager.getConfiguredNetworks();
return wifiConfigList;
}
解决:经查找,可以通过bindService后,将绑定该Service的activity的传进service里
https://zhidao.baidu.com/question/921527166235780739.html
Activity侧:myDeviceService.setBindActivity(MainActivity.this);
private final ServiceConnection conn =
new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
DeviceService.DeviceBinder binder =
(DeviceService.DeviceBinder) service;
myDeviceService = binder.getService();
myDeviceService.setBindActivity(MainActivity.this);
}
};
Service侧:
public void setBindActivity(Activity activity){
this.mBindActivity = activity;
}
暂时只能先这样,还没想到更好的方法