ffd*_*ani 9 android location android-service
我想做这样的事情:
当我的应用程序启动时,我想启动一个应检查我的位置的服务
当应用程序进入后台时,我想停止服务
我有两个主要问题:
如何检测到我的应用程序转到后台?我有几个活动,我在我的MainActivity中尝试覆盖onPause,但是当我开始其他活动时也会调用onPause.
这个问题更重要:我的服务如何检查我的位置是什么样的?我尝试了几种方法,但没有成功.
我的服务看起来像这样,但它不起作用.我应该改变什么来使它工作?
package com.pivoscore.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class LocationService extends Service {
private LocationListener locationListener;
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
this.locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, this.locationListener);
}
private static class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(final Location location) {
}
@Override
public void onProviderDisabled(final String provider) {
}
@Override
public void onProviderEnabled(final String provider) {
}
@Override
public void onStatusChanged(final String provider, final int status, final Bundle extras) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试此代码。通过使用此代码,您可以确定您的应用程序是在前台还是后台。希望对你有帮助。
try {
foreground = new ForegroundCheckTask().execute(ctx).get();
}
======================================
class ForegroundCheckTask extends AsyncTask<Context, Void, Boolean> {
@Override
protected Boolean doInBackground(Context... params) {
final Context context = params[0].getApplicationContext();
return isAppOnForeground(context);
}
private boolean isAppOnForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = context.getPackageName();
String activePackageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
if (activePackageName.equals(packageName)) {
return true;
}
else{
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12366 次 |
| 最近记录: |