在 Android 12 上,后台广播接收器可能无法使用活动识别功能来检测用户移动和位置变化,因为应用程序需要符合若干新限制。为了解决这个问题,我们可以改用 Google 推荐的新 API:移动设备和位置 API(Location and Activity Recognition API)。下面是一些示例代码,用于在后台使用移动设备和位置 API:
首先,添加以下依赖项到你的 build.gradle 文件:
dependencies {
implementation 'com.google.android.gms:play-services-location:18.0.0'
}
然后,在你的项目中使用 LocationRequest 和 LocationServices 类来创建位置请求,以及请求权限和设置位置更新侦听器。例如,下面的代码段表示你要使用前台服务,并请求位置和活动更新:
public class MyLocationService extends Service {
private FusedLocationProviderClient mFusedLocationProviderClient;
@Override
public void onCreate() {
super.onCreate();
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationProviderClient.requestLocationUpdates(locationRequest, createLocationCallback(), getMainLooper());
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentIntent(pendingIntent)
.build();
startForeground(NOTIFICATION_ID, notification);
}
private LocationCallback createLocationCallback() {
return new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
// Handle location updates
}
};
}
@Nullable
@Override
public IBinder onBind(Intent