keep application running in background

后端 未结 5 1186
暗喜
暗喜 2020-12-09 12:39

I want to keep my application running in background
I have an application that sends the user\'s location to our server
I have the following code:

pu         


        
相关标签:
5条回答
  • 2020-12-09 12:50

    Run your background logic in a Service, and if you want to give a good UX experience (and to also have an higher priority) post a Notification to status-bar (using NotificationManager).

    0 讨论(0)
  • 2020-12-09 12:54

    GrabLocationDetails.java

    Use this code as your GrabLocationDetails.java

     public class GrabLocationDetails extends Service implements LocationListener {
    
            double lat,lng;
            private LocationManager locationManager;
            private String provider;
            boolean isGps;
            private ArrayList<String> mList;
            Context GLDContext;
    
            public GrabLocationDetails(Context cont){
                this.GLDContext=cont;
            }
            public GrabLocationDetails(){}
            @Override
            public void onCreate() {
                super.onCreate();
                mList = new ArrayList<String>();
                isGps = false;
                lat=0.0;
                lng=0.0;
            }
    
            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
    
                //super.onStart(intent, startId);
    
                try {
                    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                    Criteria criteria = new Criteria();
                    provider = locationManager.getBestProvider(criteria, false);
                    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
                    boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
                    if (!enabled) {
                        isGps = false;
                        ListAddItem(isGps);
                        SendBroadcast();
                    } else {
                        isGps = true;
                        Location location = locationManager.getLastKnownLocation(provider);
                        lat=(location.getLatitude());
                        lng=(location.getLongitude());
                        ListAddItem(true);
                        SendBroadcast();
                        locationManager.requestLocationUpdates(provider, 400, 1, this);
                    }
    
                } catch (Exception e) {
                    ListAddItem(isGps);
                    SendBroadcast();
                }
                return super.onStartCommand(intent, flags, startId);
            }
    
            @Override
            public void onDestroy() {
                super.onDestroy();
                //locationManager.removeUpdates(this);
            }
    
            public  void SendBroadcast(){
                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction(CommandExecutionModule.LocationDetails);
                broadcastIntent.putExtra("Data", mList);
                sendBroadcast(broadcastIntent);
    
            }
            public void ListAddItem(boolean GPS) {
                //if(!GPS)
                //mList.add("0");
                //else
                //mList.add("1");
                mList.add(Double.toString(lat));
                mList.add(Double.toString(lng));
            }
    
            /**************************************************************************************************************/
    
            @Override
            public void onLocationChanged(Location location){
                locationManager.requestLocationUpdates(provider, 400, 1, this);
                mList.clear();
                lat = (location.getLatitude());
                lng = (location.getLongitude());
                ListAddItem(isGps);
                SendBroadcast();
                locationManager.removeUpdates(this);
                stopSelf();
            }
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                locationManager.requestLocationUpdates(provider, 400, 1, this);
            }
    
            @Override
            public void onProviderEnabled(String provider){
                isGps=true;
            }
            @Override
            public void onProviderDisabled(String provider){
                isGps=false;
                lat=0.0;
                lng=0.0;
                mList.clear();
                ListAddItem(isGps);
                //SendBroadcast();
            }
    
    0 讨论(0)
  • 2020-12-09 12:55

    You should use a Service and a BroadcastReceiver

    0 讨论(0)
  • 2020-12-09 13:00

    You can keep your application running in the background using Service

    I hope this link will help you

    Please read the documentation for further details

    0 讨论(0)
  • 2020-12-09 13:07

    A very simple answer for your problem is to use Service. It will allow you to perform variety of tasks while being in background and is your best bet for sending your location to server silently.

    Read this answer for help.

    0 讨论(0)
提交回复
热议问题