मुझे कम से कम करने के बाद एक गतिविधि में समस्या है। सब कुछ ठीक चल रहा है जब मैं एक गतिविधि शुरू करता हूं और स्टार्ट बटन दबाता हूं। लेकिन जब मैं गतिविधि को कम करता हूं और इसे फिर से अधिकतम करता हूं, तो यह मेरे बटन और आदेशों का जवाब नहीं देता है। किसी को पता है क्या करना है? यह मेरा पहला एंड्रॉइड ऐप है इसलिए मुझे नहीं पता कि क्या हो रहा है ..

यहाँ मेरी कक्षाएं हैं:

ट्रैकर सेवा

package sk.tuke.smart.makac.services;

import android.app.Service;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;


public class TrackerService extends Service implements LocationListener  {

    private Intent commandIntent;
    private long duration;
    private boolean paused,checkedAfterPause;
    private int sportActivity;
    private double distance,pace,calories;
    private ArrayList<Location> finalPositionList = new ArrayList<Location>();
    private LocationManager locationManager;




    private static final String TAG = "TrackerService";



    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Log.i(TAG,"onStart intent " +intent.getAction());
        commandIntent=intent;
        checkedAfterPause=true;
        if(intent.getAction() == "sk.tuke.smart.makac.COMMAND_START"){
            if(intent.getAction() == "sk.tuke.smart.makac.COMMAND_START") {
                duration = 0;
            }
            new Timer().scheduleAtFixedRate(new TimerTask()
            {

                @Override
                public void run() {
                    if(!paused){
                        duration++;
                        Intent intent1 = new Intent();
                        intent1.setAction("sk.tuke.smart.makac.TICK");
                        intent1.putExtra("duration", duration);
                        intent1.putExtra("distance",distance);
                        sendBroadcast(intent1);
                        Log.i(TAG,"" + duration);
                    }
                }
            }, 1000, 1000);
        }else if (intent.getAction() == "sk.tuke.smart.makac.COMMAND_PAUSE"){
            paused=true;
            locationManager.removeUpdates(this);
        }
        if(intent.getAction() == "sk.tuke.smart.makac.COMMAND_CONTINUE"){
            paused=false;
            checkedAfterPause=false;
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,10,this);
        }

    }


    @Override
    public void onCreate() {

        super.onCreate();
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,10,this);

    }

    @Override
    public void onDestroy() {
        locationManager.removeUpdates(this);
    }



    @Override
    public IBinder onBind(Intent intent) {


        return null;

    }

    @Override
    public void onLocationChanged(Location location) {
        finalPositionList.add(location);
        Location lastLocation;
        double minDistance;
        if (finalPositionList.size() != 1 && checkedAfterPause) {
            lastLocation = finalPositionList.get(finalPositionList.size() - 2);
            minDistance=location.distanceTo(lastLocation);
            if(minDistance>=2){
                distance += location.distanceTo(lastLocation);
            }else{
                finalPositionList.remove(finalPositionList.size()-1);
            }
        }
        if(commandIntent.getAction() == "sk.tuke.smart.makac.COMMAND_CONTINUE" && !checkedAfterPause){
            Log.i(TAG,"checking distance after pause");
            lastLocation = finalPositionList.get(finalPositionList.size() - 2);
            minDistance=location.distanceTo(lastLocation);
            if(minDistance<=100){
                distance += location.distanceTo(lastLocation);
            }
            checkedAfterPause=true;
        }
            Log.i(TAG,"locations " + finalPositionList);
            Log.i(TAG,"distance = " + distance);

    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }

    public long getDuration(){
        return duration;
    }



    public double getPace(){
        return pace;
    }




}

खेल गतिविधि

package sk.tuke.smart.makac;



import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import sk.tuke.smart.makac.helpers.MainHelper;
import sk.tuke.smart.makac.services.TrackerService;

public class StopwatchActivity extends AppCompatActivity {

    private static final int MY_PERMISSIONS_REQUEST_FINE_LOCATION = 111;
    private static final String TAG = "StopwatchActivity";
    private boolean started;
    private boolean running;
    private boolean paused=false;
    private long duration;
    private double distance;
    private MainHelper helper;
    private TextView durationView,distanceView;
    private Button startButton,endButton;

    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction()=="sk.tuke.smart.makac.TICK"){
                duration = intent.getLongExtra("duration",duration);
                distance = intent.getDoubleExtra("distance",distance);
                durationView.setText(helper.formatDuration(duration));
                distanceView.setText(helper.formatDistance(distance));
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stopwatch);
        IntentFilter intentFilter = new IntentFilter("sk.tuke.smart.makac.TICK");
        registerReceiver(receiver,intentFilter);
        started=false;
        running=false;
        helper = new MainHelper();
        durationView = findViewById(R.id.textview_stopwatch_duration);
        distanceView = findViewById(R.id.textview_stopwatch_distance);
        startButton = findViewById(R.id.button_stopwatch_start);
        endButton = findViewById(R.id.button_stopwatch_endworkout);
        if(!canAccessLocation()){
            ActivityCompat.requestPermissions(this,
                    new String[]{
                            Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_FINE_LOCATION);

        }
    }


    public void toggle(View view){

        Intent intent = new Intent(this,TrackerService.class);
        started=true;
        this.running = !this.running;
        if(running && started){
            startButton.setText("Stop");
            endButton.setVisibility(view.GONE);
            if(paused){
                intent.setAction("sk.tuke.smart.makac.COMMAND_CONTINUE");
                paused=false;
            }else
                intent.setAction("sk.tuke.smart.makac.COMMAND_START");

        }

        if(!running && started){
            startButton.setText("Continue");
            endButton.setVisibility(view.VISIBLE);
            intent.setAction("sk.tuke.smart.makac.COMMAND_PAUSE");
            paused=true;
        }


        startService(intent);


    }

    public void endWorkout(View view){
        Intent intent = new Intent(this,TrackerService.class);
        intent.setAction("sk.tuke.smart.makac.COMMAND_STOP");
        startService(intent);
        setContentView(R.layout.activity_workout_detail);
        onStop();
    }


    public void openMaps(View view){
        Intent intent = new Intent(StopwatchActivity.this, MapsActivity.class);
        startActivity(intent);
    }


    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onStop() {
        super.onStop();
        Intent intent= new Intent(this,TrackerService.class);
        stopService(intent);
    }


    private boolean hasPermission(String perm) {
        return(PackageManager.PERMISSION_GRANTED==checkSelfPermission(perm));
    }

    private boolean canAccessLocation() {
        return(hasPermission(Manifest.permission.ACCESS_FINE_LOCATION));
    }
}
0
Christián Szeman 15 नवम्बर 2018, 21:50

1 उत्तर

सबसे बढ़िया उत्तर

आप सेवा से कोई संबंध नहीं बना रहे हैं। आप इसे केवल शुरू कर रहे हैं, इसे बाध्य नहीं कर रहे हैं। तो बनाए रखने के लिए कोई संबंध नहीं है।

ऐसा लगता है कि आप क्रियाओं के माध्यम से अर्ध-बाध्यकारी करने का प्रयास कर रहे हैं। ऐसा मत करो, सेवा को ठीक से बांधो और इस तरह की समस्याओं की एक पूरी बेड़ा से बचें।

0
Gabe Sechan 15 नवम्बर 2018, 18:54