0
public class ReplyWithAddressService extends Service{

public static final String GOOGLE_GEOCODER = "http://maps.googleapis.com/maps/api/geocode/json?latlng=";
private String msgRecipient;
private LocationManager manager;
private MyLocationListener listener;
private static double latitude = -1;
private static double longitude = -1;
private String provider;
private String smsMessageString = "";
public static String filenames = "AntiTheft";
SharedPreferences pref;
String email;

@Override
public IBinder onBind(Intent intent){
    return null;
}

@Override
public void onCreate(){
    super.onCreate();
    Log.d(this.getClass().getName(), "Service created");
    pref = getSharedPreferences(filenames, 0);
    manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    listener = new MyLocationListener();

    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
        provider = LocationManager.GPS_PROVIDER;
    }
    else if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        provider = LocationManager.NETWORK_PROVIDER;
    }

    manager.requestLocationUpdates(provider, 0, 0, listener);
}

@Override
public void onStart(Intent intent, int startId){
    super.onStart(intent, startId);
    Log.d(this.getClass().getName(), "Service started");
    //Extract Intent Data
    msgRecipient = intent.getStringExtra("number");
    String emailAddress = pref.getString("keyemail", "");
    String contact1 = pref.getString("contact1", "");
    String contact2 = pref.getString("contact2", "");
    Log.d(this.getClass().getName(), "Number: " + msgRecipient);
    ConnectivityManager cManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cManager.getActiveNetworkInfo();

    //Get Location
    if (ReplyWithAddressService.latitude == -1 || ReplyWithAddressService.longitude == -1){
        Location location = manager.getLastKnownLocation(provider);

        if (location != null){
            ReplyWithAddressService.latitude = location.getLatitude();
            ReplyWithAddressService.longitude = location.getLongitude();

            if (info != null){

                if (info.isConnected()){
                    String address = ReplyWithAddressService.getAddressFromGPSData(ReplyWithAddressService.latitude, ReplyWithAddressService.longitude);
                    smsMessageString += "Current Location: " + address + "."; 
                }
            }

            smsMessageString += "Link: http://maps.google.com/maps?q=" + ReplyWithAddressService.latitude + "+" + ReplyWithAddressService.longitude;
            Log.d("Message", smsMessageString);
        }
        else{
            smsMessageString = "Location Data is Not Available";
        }
    }

    SmsManager sManager = SmsManager.getDefault();
    String number = msgRecipient;
    String contactNo1 = contact1;
    String contactNo2 = contact2;
    email = emailAddress; 

    //Send SMS message
    sManager.sendTextMessage(number, null, smsMessageString, null, null);
    sManager.sendTextMessage(contactNo1, null, smsMessageString, null, null);
    sManager.sendTextMessage(contactNo2, null, smsMessageString, null, null);

    try{
        sendMail();
    } catch(MessagingException e){
        e.printStackTrace();
    }

    stopSelf(startId);
}

I am developing a location tracker mobile apps and once the lost mobile phone retrieves the location, it will send the current location to a predefined email address and mobile phone numbers. It has no problem if my phone is connected to Wi-Fi, but when I turn off the Wi-Fi, I am not able to receive the location information via my email, I just want to know how can I do to check is there any Wi-Fi connected in my mobile, if yes, then Wi-Fi is preferred and if not, enable the mobile network automatically in order to send out the email message. My purpose is to make sure the email can be sent out under any condition (no matter Wi-Fi present or not)... Hope someone can help me, thanks...

Android_Rookie
  • 509
  • 2
  • 10
  • 25
  • If you just need to determine whether or not WiFi is connected this question may help: http://stackoverflow.com/questions/5888502/android-wifi-how-to-detect-when-wifi-connection-has-been-established – Nathan Villaescusa Oct 14 '12 at 04:40

1 Answers1

1

You can register a BroadcastReceiver to be notified when a WiFi connection is established or has been changed.

Register the BroadcastReceiver:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
registerReceiver(broadcastReceiver, intentFilter);

And then in that BroadcastReceiver you can use something like:

  @Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction();
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
        if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
            //wifi is connected. You can do stuff here.
        } else {
            // wifi connection is gone.
        }
    }

Docs for BroadcastReceiver: http://developer.android.com/reference/android/content/BroadcastReceiver.html

Docs for WifiManager: http://developer.android.com/reference/android/net/wifi/WifiManager.html

You need to check if device is already connected to wifi before using the above code since the above code will only notify you when the connection state is changed. It has be connected in the first place. To check that, you can use:

WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    if (wifiInfo != null) {
        //connection is established
    }
Anup Cowkur
  • 20,443
  • 6
  • 51
  • 84