# Thread / Intent als externe  klasse



## ms_cikar (4. Aug 2015)

Hallo Leute,

in meinem Android Hauptklasse verwende ich die LocationListener. 

Ich möchte die GPS Location Ermittlung separat in einer klasse packen und nur die Koordinaten als Parameter von meiner Hauptklasse lesen. Die Koordinaten Ermittlung soll im Hintergrund laufen.

Ich habe erst mit Intent probiert habe es nicht hinbekommen. Wie kann ich es machen ist Intent dafür geeignet oder sollte ich lieber Thread benutzen?

heir ist mein Code.



```
package com.example.location;






import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity implements LocationListener {
   
    double p1, p2;
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LocationManager lm =(LocationManager)getSystemService(LOCATION_SERVICE);
        String provider = lm.getBestProvider(new Criteria(), true);
       
        lm.requestLocationUpdates( LocationManager.GPS_PROVIDER,0,0, this);
       
        if(provider == null){
            onProviderDisabled(provider);
        }
    }


    @Override
    public void onLocationChanged(Location location) {
       
         p1= location.getLatitude();
         p2= location.getLongitude();

        
       String str = "Latitude: "+location.getLatitude()+"Longitude: "+location.getLongitude();
       Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();
      
       TextView text = (TextView)findViewById(R.id.txtpos);
       text.setText(String.valueOf(p1 +" "+ p2));

      
 
      
       TextView speed_ausgabe1 = (TextView)findViewById(R.id.btnlaenge);
       speed_ausgabe1.setText(String.valueOf(speed2));
      
       TextView speed_ausgabe2 = (TextView)findViewById(R.id.btnbreite);
       speed_ausgabe2.setText(String.valueOf(speedkmh));
       
    }


    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
       
    }


    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
       
    }


    @Override
    public void onProviderDisabled(String provider) {
        AlertDialog.Builder builder =new AlertDialog.Builder(this);
        builder.setTitle("GPS is Disabled");
        builder.setCancelable(false);
        builder.setPositiveButton("Enable GPS", new DialogInterface.OnClickListener() {
           
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent startGps = new Intent (android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(startGps);
               
            }
        });
        builder.setNegativeButton("Leave Gps off",  new DialogInterface.OnClickListener() {
           
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
               
            }
        });

        AlertDialog alert = builder.create();
        alert.show();
       
       
       
    }
}
```


----------



## dzim (6. Aug 2015)

Einfach nur ein Intent wird nicht genügen. Du kannst natürlich einen anderen Thread nutzen, aber eigentlich registriert man sich nur bei dem entsprechenden LocationManager und bekommt asynchrone Callbacks. Kein Grund da etwas in einem anderen Thread oder gar einen Service auszulagern.

Ein Beispiel findest du in Lars Vogels Tutorials:
http://www.vogella.com/tutorials/AndroidLocationAPI/article.html#tutlocationapi


----------

