Android: сохраняйте местоположение GPS с другими данными, отправленными и отправленными на веб-сервер - PullRequest
0 голосов
/ 07 июня 2011

В моем mainActivity у меня есть просмотр списка, где пользователь может выбрать один.Например, в mainActivity есть 3 списка, которые представляют собой startTripActivity, ClockinActivity, CustomerSvcActivity.

Для начального действия пользователь нажимал на это, и он отображал кнопку, а после щелчка отображал тост-сообщение с информацией о своем местонахождении и отправлял на сервер.Для clockinActivity пользователь может щелкнуть, чтобы отобразить текущее время / дату, и нажать кнопку, чтобы отправить эти данные на сервер.

Для клиентов vcActivity пользователь нажимает кнопку, и он открывает сканер штрих-кода, возвращает результат и отправляет его на сервер.То, что я хочу сделать, это каждое из тех действий, которые были отправлены на сервер. Я также хочу отправить местоположение GPS с данными.Например, starttrip будет отправлять информацию GPS на сервер, Clockin будет отправлять время / дату Clockin, а также информацию о местоположении GPS, где они синхронизированы, и данные о результатах штрих-кода, а также информацию о местоположении GPS, где они сканировали код, отправленный на сервер.

Я хотел бы увидеть некоторые образцы и предложения.Все поиски, которые я нашел, в основном заключаются в том, как получать данные gps каждые xx минут, что не совсем то, что я ищу, и немногие другие не очень мне помогают.В самом низу этого поста приведены коды моего образца, связывающегося с веб-сервером.

Спасибо

MainActivity.java

public class Customer extends ListActivity
{   
    CustomerListItem[] items = { 
            new CustomerListItem("Start Trip", StartTripActivity.class), 
            new CustomerListItem("Clock in", ClockinActivity.class), 
            new CustomerListItem("Customer Svc", CustomerSvcActivity.class), 

    private String username;


    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.customer);
        setListAdapter(new ArrayAdapter<CustomerListItem>(
                this, android.R.layout.simple_list_item_1, items));
        selection = (TextView) findViewById(R.id.selection);
        resultsTxt = (TextView) findViewById(R.id.cancel);


    @Override
    protected void onListItemClick(ListView l, View v, int position, long id)
    {
        super.onListItemClick(l, v, position, id);
        final Intent intent = new Intent(this, items[position].getActivity());
        startActivityForResult(intent, position);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);
        if (resultCode == RESULT_OK)
        {
            // Perform different actions based on from which activity is
            // the application returning:
            switch (requestCode)
            {
                case 0:
                    // TODO: handle the return of the StartTripActivity
                    break;
.............
}

StartTripActivity

public class StartTripActivity extends Activity {

    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds

    protected LocationManager locationManager;

    protected Button retrieveLocationButton;


    private void Pop(String string) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.start);

        retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 
                MINIMUM_TIME_BETWEEN_UPDATES, 
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
                new MyLocationListener()
        );

    retrieveLocationButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showCurrentLocation();

}
    protected void showCurrentLocation() {

        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        if (location != null) {
            String message = String.format(
                    "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            Toast.makeText(StartTripActivity.this, message,
                    Toast.LENGTH_LONG).show();

        }
        Intent i = new Intent(getApplicationContext(), Customer.class);
        startActivity(i);

    }   

    class MyLocationListener implements LocationListener {

        @SuppressWarnings("null")
        public void onLocationChanged(Location location) {
            String message = String.format(
                    "New Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            Toast.makeText(StartTripActivity.this, message, Toast.LENGTH_LONG).show();

            } catch (Exception e) {

            }
        }

        public void onStatusChanged(String s, int i, Bundle b) {
            Toast.makeText(StartTripActivity.this, "Provider status changed",
                    Toast.LENGTH_SHORT).show();
        }

        public void onProviderDisabled(String s) {
            Toast.makeText(StartTripActivity.this,
                    "Provider disabled by the user. GPS turned off",
                    Toast.LENGTH_LONG).show();
        }

        public void onProviderEnabled(String s) {
            Toast.makeText(StartTripActivity.this,
                    "Provider enabled by the user. GPS turned on",
                    Toast.LENGTH_LONG).show();
        }

ClockinActivity.java

public class ClockinActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clockin);

        TextView textView= (TextView)findViewById(R.id.Date);
        String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

     textView.setText(currentDateTimeString);

        Thread myThread = null;

        Runnable runnable = new CountDownRunner();
       myThread= new Thread(runnable);   
        myThread.start();

   }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Pop("Back Button");
            Intent intent = new Intent();
            setResult(RESULT_OK, intent);
            finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

   private void Pop(String string) {
        // TODO Auto-generated method stub

    }
public void doWork() {

   runOnUiThread(new Runnable() {
       public void run() {
           try{
       TextView txtCurrentTime= (TextView)findViewById(R.id.lbltime);
                   Date dt = new Date();
                   int hours = dt.getHours();
                   int minutes = dt.getMinutes();
                   int seconds = dt.getSeconds();
                   String curTime = hours + ":"+ minutes + ":"+ seconds;
                   txtCurrentTime.setText(curTime);
       }catch (Exception e) {

       }
       }
   });

   }

   class CountDownRunner implements Runnable{
       // @Override
       public void run() {
               while(!Thread.currentThread().isInterrupted()){
                   try {
                   doWork();
                       Thread.sleep(1000);
                   } catch (InterruptedException e) {
                           Thread.currentThread().interrupt();
                   }catch(Exception e){
                   }
               }   

Button btn = (Button) findViewById(R.id.btn_OK);

btn.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View view) {        

        Intent i = new Intent(getApplicationContext(), Customer.class);
        startActivity(i);

        //finish(); 
    }

CustomerSvcActivity.java
public class CustomerSvcActivity extends Activity {
    private Button btnscan;

    @Override  
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {  
        if(keyCode==KeyEvent.KEYCODE_BACK)  
        {  
            this.startActivity(new Intent(CustomerSvcActivity.this,Customer.class));  
        }  
        return true;  
    }  


    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.customersvc);

        btnscan = (Button) findViewById(R.id.scanbtn);


        btnscan.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                IntentIntegrator.initiateScan(CustomerSvcActivity.this); 
    }
        });
            }
    protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {
                switch(requestCode) {
                    case IntentIntegrator.REQUEST_CODE: {
                        if (resultCode != RESULT_CANCELED) {
                            IntentResult scanResult =
            IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
                            if (scanResult != null) {
                                String upc = scanResult.getContents();
                                // need to return the result without display and send to server???

                            }
                                                }
                        break;

Пример класса отправки данных

public class Sample extends Activity {
    /** Called when the activity is first created. */
    TextView result;
    EditText text;
    Button send;
    private ArrayList<NameValuePair> postParameters;
    AlertDialog.Builder alert;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        alert = new AlertDialog.Builder(this);
        alert.setCancelable(true);

        result=(TextView)findViewById(R.id.result);
        text=(EditText)findViewById(R.id.text);
        send=(Button)findViewById(R.id.send);

        send.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                //postParameters.add(new BasicNameValuePair("text",
                        //text.getText().toString()));
                postData(text.getText().toString());
                //saveData();
                showData();
            }
public void showData()
    {
        try {
            String response = CustomHttpClient
                    .executeHttpGet("http://www.merrill.com/android.php");

            result.setText(response);
        } catch (Exception e) {
        }
    }

1 Ответ

1 голос
/ 07 июня 2011

API определения местоположения Android является периодическим. Если вы хотите одноразовое исправление местоположения, инициированное любым из действий пользователя, вы можете использовать LocationManager.getLastKnownLocation (), но вы захотите проверить отметку времени возвращенного исправления. Чтобы получить новое исправление, вам нужно:

-request location data using a small period time 
-wait until the first location fix comes in 
-cancel your location request

Для этого потребуется асинхронная связь, которую вы можете делать, как вам удобно. Вы можете использовать функции обратного вызова или передать работающую систему или систему передачи сообщений, если у вас есть доступ к той, которую легко включить. Возвращение GPS может занять пару минут, и, возможно, не удастся получить действительное исправление, поэтому вам придется учитывать это.

Надеюсь, это поможет.

...