2015-12-03 3 views
1

Я использую карту, чтобы получить текущее местоположение, и теперь я хочу отправить свое текущее местоположение в другое действие, которое имеет форму для ввода всех данных. Я смущен, какие переменные и методы я должен использовать для отправки данных местоположения.Как отправить текущее местоположение из одной активности в другую?

ChooseFromMapActivity

Это деятельность, где я получаю мое текущее местоположение. И теперь на Click of useLocation layout я хочу отправить это местоположение в текст редактирования другой активности i.e GoSendActivity.

public class ChooseFromMapActivity extends AppCompatActivity implements 
     LocationListener, GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    private LocationRequest mLocationRequest; 
    GoogleMap mGoogleMap; 

    private GoogleApiClient mGoogleApiClient; 
    boolean mUpdatesRequested = false; 
    private LatLng center; 
    private LinearLayout markerLayout; 
    private Geocoder geocoder; 
    private List<Address> addresses; 
    private TextView Address; 
    double latitude; 
    double longitude; 
    private GPSTracker gps; 
    private LatLng curentpoint; 
    private LinearLayout useLocation; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_choose_from_map); 
     Address = (TextView) findViewById(R.id.textShowAddress); 
     markerLayout = (LinearLayout) findViewById(R.id.locationMarker); 
     useLocation = (LinearLayout)findViewById(R.id.LinearUseLoc); 

     int status = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(getBaseContext()); 

     if (status != ConnectionResult.SUCCESS) { // Google Play Services are 
      // not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 
        requestCode); 
      dialog.show(); 

     } else { // Google Play Services are available 

      // Getting reference to the SupportMapFragment 
      // Create a new global location parameters object 
      mLocationRequest = LocationRequest.create(); 

      /* 
      * Set the update interval 
      */ 
      mLocationRequest.setInterval(GData.UPDATE_INTERVAL_IN_MILLISECONDS); 

      // Use high accuracy 
      mLocationRequest 
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

      // Set the interval ceiling to one minute 
      mLocationRequest 
        .setFastestInterval(GData.FAST_INTERVAL_CEILING_IN_MILLISECONDS); 

      // Note that location updates are off until the user turns them on 
      mUpdatesRequested = false; 

      /* 
      * Create a new location client, using the enclosing class to handle 
      * callbacks. 
      */ 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(LocationServices.API).addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this).build(); 

      mGoogleApiClient.connect(); 
     } 

     useLocation.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


      } 
     }); 
    } 

    private void stupMap() { 
     try { 

      mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(
        R.id.map)).getMap(); 

      // Enabling MyLocation in Google Map 
      mGoogleMap.setMyLocationEnabled(true); 
      mGoogleMap.getUiSettings().setZoomControlsEnabled(true); 
      mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true); 
      mGoogleMap.getUiSettings().setCompassEnabled(true); 
      mGoogleMap.getUiSettings().setRotateGesturesEnabled(true); 
      mGoogleMap.getUiSettings().setZoomGesturesEnabled(true); 

      gps = new GPSTracker(this); 

      gps.canGetLocation(); 

      latitude = gps.getLatitude(); 
      longitude = gps.getLongitude(); 
      curentpoint = new LatLng(latitude, longitude); 

      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(curentpoint).zoom(19f).tilt(70).build(); 

      mGoogleMap.setMyLocationEnabled(true); 
      mGoogleMap.animateCamera(CameraUpdateFactory 
        .newCameraPosition(cameraPosition)); 
      // Clears all the existing markers 
      mGoogleMap.clear(); 

      mGoogleMap.setOnCameraChangeListener(new OnCameraChangeListener() { 

       @Override 
       public void onCameraChange(CameraPosition arg0) { 
        // TODO Auto-generated method stub 
        center = mGoogleMap.getCameraPosition().target; 

        mGoogleMap.clear(); 
        markerLayout.setVisibility(View.VISIBLE); 

        try { 
         new GetLocationAsync(center.latitude, center.longitude) 
           .execute(); 

        } catch (Exception e) { 
        } 
       } 
      }); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onConnected(Bundle arg0) { 
     // TODO Auto-generated method stub 
     stupMap(); 

    } 

    private class GetLocationAsync extends AsyncTask<String, Void, String> { 

     // boolean duplicateResponse; 
     double x, y; 
     StringBuilder str; 

     public GetLocationAsync(double latitude, double longitude) { 
      // TODO Auto-generated constructor stub 

      x = latitude; 
      y = longitude; 
     } 

     @Override 
     protected String doInBackground(String... params) { 

      try { 
       geocoder = new Geocoder(ChooseFromMapActivity.this, Locale.ENGLISH); 
       addresses = geocoder.getFromLocation(x, y, 1); 
       str = new StringBuilder(); 
       if (Geocoder.isPresent()) { 

        if ((addresses != null) && (addresses.size() > 0)) { 
         Address returnAddress = addresses.get(0); 

         String localityString = returnAddress.getLocality(); 
         String city = returnAddress.getCountryName(); 
         String region_code = returnAddress.getCountryCode(); 
         String zipcode = returnAddress.getPostalCode(); 

         str.append(localityString + ""); 
         str.append(city + "" + region_code + ""); 
         str.append(zipcode + ""); 
        } 
       } else { 
       } 
      } catch (IOException e) { 
       Log.e("tag", e.getMessage()); 
      } 
      return null; 

     } 

     @Override 
     protected void onPostExecute(String result) { 
      try { 
       Address.setText(addresses.get(0).getAddressLine(0) 
         + addresses.get(0).getAddressLine(1) + " "); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 

     } 
    } 

    @Override 
    public void onConnectionSuspended(int arg0) { 
     // TODO Auto-generated method stub 

    } 
} 

GoSendActivity

Это мой GoSendActivity, который имеет вид редактирования текста. Я хочу получить текущее местоположение в текстовом виде edttxt_from.

public class GoSend extends AppCompatActivity { 
    LatLng latLng; 
    private GoogleMap mMap; 
    MarkerOptions markerOptions; 
    LinearLayout ll; 
    Toolbar toolbar; 
    EditText editTextLocation; 
    EditText edtxt_from; 
    EditText edtxt_to; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gosendlayout); 

     setUI(); 

     if (Build.VERSION.SDK_INT >= 21) { 
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
      getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark)); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      // Respond to the action bar's Up/Home button 
      case android.R.id.home: 
       NavUtils.navigateUpFromSameTask(this); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public void setUI() { 

     ll = (LinearLayout) findViewById(R.id.LinearLayoutGoSend); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle("GO-SEND"); 


     try { 
      if (mMap == null) { 
       mMap = ((MapFragment) getFragmentManager(). 
         findFragmentById(R.id.map)).getMap(); 
      } 
      mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
      LatLng sydney = new LatLng(-34, 151); 
      mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
      mMap.setMyLocationEnabled(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     edtxt_from=(EditText)findViewById(R.id.editText_from); 
     edtxt_to=(EditText)findViewById(R.id.editText_to); 

     edtxt_from.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

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

     edtxt_to.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

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

    }  
} 

Расположение Класс

public class Location { 

    private int id; 
    private String mFrom_loc; 
    private String mTo_loc; 
    private String mFromloc_details; 
    private String mToloc_details; 
    private String mItems_details; 

    public Location(int id,String mFrom_loc,String mFromloc_details,String mTo_loc,String mToloc_details,String mItems_details) 
    { 
     this.id=id; 
     this.mFrom_loc=mFrom_loc; 
     this.mFromloc_details=mFromloc_details; 
     this.mTo_loc=mTo_loc; 
     this.mToloc_details=mToloc_details; 
     this.mItems_details=mItems_details; 

    } 

    public Location(String mFrom_loc){ 
     this.mFrom_loc=mFrom_loc; 
    } 
    public Location(){} 

    public int getId(int id){return id;} 
    public String getmFrom_loc(String mFrom_loc){return mFrom_loc;} 
    public String getmTo_loc(String mTo_loc){return mTo_loc;} 
    public String getmFromloc_details(String mFromloc_details){return mFromloc_details;} 
    public String getmToloc_details(String mToloc_details){return mToloc_details;} 
    public String getmItems_details(String mItems_details){return mItems_details;} 



    public void setId(){this.id=id;} 
    public void setmFrom_loc(){this.mFrom_loc=mFrom_loc;} 
    public void setmTo_loc(){this.mTo_loc=mTo_loc;} 
    public void setmFromloc_details(){this.mFromloc_details=mFromloc_details;} 
    public void setmToloc_details(){this.mToloc_details=mToloc_details;} 
    public void setmItems_details(){this.mItems_details=mItems_details;} 

} 

Как я могу добиться этого ?? Пожалуйста, помогите ..

+0

установить onClickListener и создать новый Intent() с добавлением в него местоположения с помощью методов putExtra(). Сделайте небольшой поиск в Google, и вы увидите много примеров. – newbieee

+0

релевантно: https: // stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on-android –

+0

Да, я могу передать, добавив дополнительный метод в другое действие. Но как я могу добавить свое местоположение в переменную класса местоположения? –

ответ

0

Сделайте этот класс сериализуемым и поместите его в намерение с помощью bundle.putSerializable («myclaa», location).

Расположение класса реализует Seraializable { }

2

попробовать это:

useLocation.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(ChooseFromMapActivity.this , GoSendActivity.class); 
      intent.putExtra("Latitude", latitude); 
      intent.putExtra("Longitude", longitude); 
      startActivity(intent); 
     } 
    }); 

И в OnCreate из GoSendActivity, получить широту и долготу, как это:

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    double latitude = extras.getDouble("Latitude"); 
    double longitude = extras.getDouble("Longitude"); 
} 

Теперь вы можете установить широту и долгота к вашему edittext edittext.setText(String.valueOf(latitude));

+0

Благодарим за сообщение. Я попробую это. Но моя широта и долгота хранятся в центральной переменной latlang. Помогло бы это получить отдельные значения широты и долготы? @bhargav –

+0

Я хочу показать обратное геокодированное значение в моем текстовом редакторе. @bhargav –

+0

обратитесь http://stackoverflow.com/questions/15264884/getting-latitude-and-longitude-from-latlng-object-in-android и http://stackoverflow.com/questions/472313/android-reverse- geocoding-getfromlocation –

1

Помимо передачи данных следующему действию с использованием намерений, вы также можете использовать общие настройки, TinyDB lib достигает отличных результатов для кэширования данных. Yoou нужно будет синхронизировать это в Gradle файле:

compile 'com.mukesh:tinydb:1.0.1' 

затем в вашем OnCreate в каждом упражнении вы будете использовать то же самое, инициализировать TinyDB, передавая контекст приложения

TinyDB tinyDB = new TinyDB(getApplicationContext()); 

С, что вы можете хранить и извлекать любые данные в приложение с использованием пары ключ-значение, пример для хранения координат, просто позвоните:

tinyDB.putDouble("latitude",latitude); 
tinyDB.putDouble("longitude",longitude); 

и вы можете получить данные, таким образом:

double latitude = tinyDB.getDouble("latitude"); 
double longitude = tinyDB.getDouble("longitude"); 

Этот класс поддерживает все форматы данных: от строк, двойных, плавающих и даже объектов, таких как ararayLists. Очень рекомендую вам попробовать.

+0

Каковы плюсы и минусы использования этого lib над 'sharedPref'? – androidXP

+0

@androidXP библиотека tinyDB была непосредственно получена из общих настроек. Все общие предпочтения и недостатки являются плюсами и минусами tinyDB. Вы можете ознакомиться с исходным java-файлом здесь [link] (https://github.com/mukeshsolanki/Android-Shared-Preferences-TinyDB-/blob/master/tinydb/src/main/java/com/mukesh/ tinydb/TinyDB.java) –

+0

, тогда нет причин добавлять дополнительную библиотеку, если оба они одинаковы. – androidXP

Смежные вопросы