Sending GPS Coordinates via sms

时光总嘲笑我的痴心妄想 提交于 2019-12-10 00:05:36

问题


I am new to android. i am trying to develop an app which fetch users current GPS coordinates and send them via sms to a hardcoded number. I am using two activities, first one has a progress bar and some text( Processing, Please wait),it is actually fetching GPS coordinates in background. The second one is receiving coordinates from first activity and sending the sms. The problem which i m facing is that in MainActivity.java file the condition if(latitude>0) is never satisfied since gps normally take some time to get coordinates and I cant go to second activity. I m attaching the code, please help me on this. you can edit the code if u like. Thanks in Advance.

package com.shaji.smartcab;

import com.shaji.smartcab.MainActivity;
import com.shaji.smartcab.MyLocationListener;
import com.shaji.smartcab.R;


import android.os.Bundle;
import android.app.Activity;

import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;
import android.location.LocationListener; 
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;


public class MainActivity extends Activiy{
double lat;
double lon;
String coordinates;
String coor;


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

    TextView tv= (TextView) findViewById(R.id.textView1);



            LocationManager mlocManager=null;  
             LocationListener mlocListener;  
             mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);  
             mlocListener = new MyLocationListener();  
            mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 600,10, mlocListener);  



       if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 



                 if(MyLocationListener.latitude>0) {
                lat = MyLocationListener.latitude;
                lon = MyLocationListener.longitude;
                tv.setText("m fetching coordinates");

                coordinates= lat+","+lon;

      Intent intent = new Intent(MainActivity.this, Sec.class);
      intent.putExtra(coor, coordinates);
      startActivity(intent);






                //tv1.setText("Latitude:" + MyLocationListener.latitude +  ",Longitude:" + MyLocationListener.longitude );
                 }}



               else {  
                   Context context = getApplicationContext();
                   CharSequence text = "Please turn ON GPS and Try again Later!";
                   int duration = Toast.LENGTH_SHORT;

                   Toast toast = Toast.makeText(context, text, duration);
                   toast.show(); 
                   tv.setText(" ");

              }  


     };

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}}

enter code herepackage com.shaji.smartcab;

import android.location.Location;  
import android.location.LocationListener;  
import android.os.Bundle;  

public class MyLocationListener implements LocationListener {  

public static double latitude;  
public static double longitude;

@Override  
public void onLocationChanged(Location loc)  
{  

    loc.getLatitude();  
    loc.getLongitude();  
    latitude=loc.getLatitude();  
    longitude=loc.getLongitude();


}  

@Override  
public void onProviderDisabled(String provider)  
{  
    //print "Currently GPS is Disabled";  
}  
@Override  
public void onProviderEnabled(String provider)  
{  
    //print "GPS got Enabled";  
}  
@Override  
public void onStatusChanged(String provider, int status, Bundle extras)  
{  
}  
} 




//this is the second activity.
package com.shaji.smartcab;
import com.shaji.smartcab.R;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Sec extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);



    final String sms = (String) getIntent().getExtras().get("coor");
    Button c = (Button) findViewById(R.id.button1);
    c.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            String phoneNo = "03136166588";
               //String sms = "coordinates";

               try {
                                       SmsManager smsManager = SmsManager.getDefault();
                                        smsManager.sendTextMessage(phoneNo, null, sms, null, null);
                                        Toast.makeText(getApplicationContext(), "Request Sent!",
                                                Toast.LENGTH_LONG).show();
                                    } catch (Exception e) {
                                        Toast.makeText(getApplicationContext(),
                                                " Error, please try again later!",
                                                Toast.LENGTH_LONG).show();
                                        e.printStackTrace();

        }

        }});


}}

回答1:


I think the problem is, location update is not done before you call the next Activity.

Before you get the updates, get the co-ordinates using one of the 3 providers. Refer following code.

private Location getUserLocation() {

location_manager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (location_manager != null) {

   List<String > provider=location_manager .getAllProviders();
            Location location = null;
            for(int i=0;i<provider.size();i++){
                 location=location_manager .getLastKnownLocation(provider.get(i));
                 if(location!=null){
                          location_manager.requestLocationUpdates(provider.get(i),
                                                    MIN_TIME_BW_UPDATES,
                                                    MIN_DISTANCE_CHANGE_FOR_UPDATES,mlocListener);
                       break;
                      }
            }


return location;

}
}


来源:https://stackoverflow.com/questions/19216826/sending-gps-coordinates-via-sms

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!