gpt4 book ai didi

java - 当应用程序被破坏或进入后台时,Android 位置服务停止工作

转载 作者:行者123 更新时间:2023-12-02 08:49:08 25 4
gpt4 key购买 nike

我正在构建一个基于位置的应用程序,并且创建了一个在后台运行的服务。当应用程序进入后台或被破坏并且在我的服务类中时,如果我循环播放音频,它会完美地工作。

即使我销毁应用程序,音频仍在继续播放,并且为了获取用户位置,我正在使用 FusedLocationProviderClient API,它也可以通过服务工作,但仅当应用程序位于前台时,当应用程序用户转到其他应用程序或销毁时应用程序无法获取位置,但媒体播放器在同一服务中工作正常。

我的服务等级

public class ServiceClass extends Service {

private MediaPlayer mediaplayer;
private FusedLocationProviderClient fusedLocationProviderClient;
private LocationRequest locationRequest;
private Context mContext;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

//Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
mContext = this;
mediaplayer = MediaPlayer.create(this,Settings.System.DEFAULT_RINGTONE_URI);
mediaplayer.setLooping(true);
mediaplayer.start();
getLocation();

return START_STICKY;
}

public void getLocation() {

Toast.makeText(mContext, "Engine X started YO", Toast.LENGTH_SHORT).show();

fusedLocationProviderClient = new FusedLocationProviderClient(this);
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setFastestInterval(1000);
locationRequest.setInterval(1000);

fusedLocationProviderClient.requestLocationUpdates(locationRequest, new LocationCallback(){

@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
Log.d("X_loc_BAck", ""+locationResult.getLastLocation().getAccuracy());
Toast.makeText(mContext, ""+locationResult.getLastLocation().getLatitude(), Toast.LENGTH_SHORT).show();



}
},getMainLooper());

}



@Override
public void onDestroy() {
super.onDestroy();
mediaplayer.stop();
//Toast.makeText(this, "Service Desttroyed", Toast.LENGTH_SHORT).show();
}

@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
mediaplayer.stop();
Intent i = new Intent(this, ServiceStopped.class);
sendBroadcast(i);
//Toast.makeText(this, "Service Task Removed", Toast.LENGTH_SHORT).show();
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}

最佳答案

根据documentation :

此方法适合前台用例。对于后台用例,建议使用该方法的 PendingIntent 版本,请参阅 requestLocationUpdates(LocationRequest, PendingIntent)。

看看this sample projectPendingIntent

关于java - 当应用程序被破坏或进入后台时,Android 位置服务停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60898730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com