在Android 10上,应用在前台服务中发送位置信息的方式发生了变化,需要使用新的API。
解决方法如下:
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import androidx.core.app.ActivityCompat;
public class LocationService extends Service {
private LocationManager locationManager;
private LocationListener locationListener;
@Override
public void onCreate() {
super.onCreate();
// 获取LocationManager实例
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// 创建LocationListener实例
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 发送位置信息
sendLocation(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
};
// 请求位置更新
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
@Override
public void onDestroy() {
super.onDestroy();
// 停止位置更新
if (locationManager != null && locationListener != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.removeUpdates(locationListener);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void sendLocation(Location location) {
// 在此处发送位置信息
}
}
请注意,上述代码中只包含了获取位置信息和发送位置信息的基本逻辑,你可能需要根据自己的需求进行适当的修改和完善。