获取无线网络的位置,但没有gps

时间:2014-10-16 05:55:25

标签: android service gps android-wifi smsmanager

我遇到了问题我正在处理一个总是在后台运行的应用程序,并在一段时间间隔后通过短信发送gps坐标,如果手机重新启动应用程序应自动启动而不进行任何操作发射器活动。当gps启用时,我突然遇到一个问题,即我的应用程序在android kitkat上获取位置,并且当gps被禁用时它正在使用软糖豆。我真的很困惑它应该是什么。请告诉我哪里错了,并建议我如何解决它。

我的接收器课程

public class AlarmReceiver extends BroadcastReceiver{

long time = 5* 1000; 
long distance = 10; 

@Override
public void onReceive(final Context context, Intent intent) {

    System.out.println("alarm receiver....");
    Intent service = new Intent(context, MyService.class);
    context.startService(service);

    //Start App On Boot Start Up
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
    Intent App = new Intent(context, MainActivity.class);
    App.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(App);
    }

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

    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    locationManager.requestLocationUpdates(provider, time, distance, locationListener);

    Location location = locationManager.getLastKnownLocation(provider);
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String device_id = tm.getDeviceId();  // returns IMEI number 

    String phoneNo = "+923333333";
    String Text = "Latitude = " + location.getLatitude() +" Longitude = " + location.getLongitude() + " Device Id: " + device_id;

    try {
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(phoneNo, null, Text, null, null);
    Log.i("Send SMS", "");

    Toast.makeText(context, "message sent", Toast.LENGTH_SHORT).show();

    } catch (Exception e) {
    Toast.makeText(context, "SMS faild, please try again.",
    Toast.LENGTH_LONG).show();
    e.printStackTrace();
 } 
    this.abortBroadcast();

}

    LocationListener locationListener = new LocationListener() {

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    @Override
    public void onLocationChanged(Location location) {

    }
};

}

清单文件中添加了所有必要的权限。

1 个答案:

答案 0 :(得分:0)

试试这种方式,希望这可以帮助您解决问题。  使用这个类,你希望通过wifi和互联网获取getlocation,

调用此方法, // ***       new GetCurLocation(getActivity(),0,true,null,this,2000);

并实施" SetOnLocationFoundListner" ,你通过wifi和互联网找到位置。谢谢

public class GetCurLocation implements LocationListener,
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener {

public static LocationClient mLocationClient;
LocationRequest mLocationRequest;
public static LocationManager locationmanager;

float accuracy = 500;
Activity context;
boolean getLocRegularly = false;
int interval = 1000;
float Radius;
GoogleMap gmap;

SetOnLocationFoundListner OLF;

public interface SetOnLocationFoundListner {
    public void onLocationFound(Location location, boolean getLocRegularly,
            GoogleMap gmap);
}

public void RemoveUpdates() {
    try {
        if (mLocationClient != null)
            mLocationClient.removeLocationUpdates(this);
        if (locationmanager != null)
            locationmanager.removeUpdates(LocUpByLocMgr);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

/*
 * radius should be in meters
 */
public GetCurLocation(Activity activity, int interval,
        boolean getLocRegularly, GoogleMap gmap,
        SetOnLocationFoundListner OLF, float Radius) {
    this.OLF = OLF;
    this.gmap = gmap;
    this.context = activity;
    this.getLocRegularly = getLocRegularly;
    this.interval = interval;
    this.Radius = Radius;
    if (servicesConnected()) {
        mLocationClient = new LocationClient(context, this, this);
        mLocationClient.connect();
        mLocationRequest = LocationRequest.create();
        mLocationRequest.setInterval(interval);
        mLocationRequest
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setFastestInterval(interval);
    }

    locationmanager = (LocationManager) context
            .getSystemService(Context.LOCATION_SERVICE);
    Criteria cr = new Criteria();
    String provider = locationmanager.getBestProvider(cr, true);
    locationmanager.requestLocationUpdates(provider, interval, 10,
            LocUpByLocMgr);
}

private boolean servicesConnected() {
    int resultCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(context);
    if (ConnectionResult.SUCCESS == resultCode) {
        return true;
    } else {
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode,
                (Activity) context, 0);
        if (dialog != null) {
        }
        return false;
    }
}

@Override
public void onConnectionFailed(ConnectionResult result) {

}

@Override
public void onConnected(Bundle connectionHint) {
    try {

        Location location = mLocationClient.getLastLocation();

        Log.e("testing",
                location.getLatitude() + "," + location.getLongitude()
                        + "," + location.getAccuracy());
        if (location.getAccuracy() < Radius) {
            OLF.onLocationFound(location, getLocRegularly, gmap);
            locationmanager.removeUpdates(LocUpByLocMgr);
        } else
            mLocationClient.requestLocationUpdates(mLocationRequest, this);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
public void onDisconnected() {
}

@Override
public void onLocationChanged(Location location) {
    try {
        if (location.getAccuracy() > Radius) {
            Log.e("testing LC", location.getAccuracy()
                    + " Its Not Accurate");
        } else {
            Log.e("testing LC", location.getAccuracy() + " Its Accurate");
            try {
                OLF.onLocationFound(location, getLocRegularly, gmap);
                if (!getLocRegularly) {
                    mLocationClient.removeLocationUpdates(this);
                    locationmanager.removeUpdates(LocUpByLocMgr);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

android.location.LocationListener LocUpByLocMgr = new android.location.LocationListener() {

    @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) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {

        try {
            if (location.getAccuracy() > Radius) {
                Log.e("testing LM", location.getAccuracy()
                        + " Its Not Accurate");
            } else {
                Log.e("testing LM", location.getAccuracy()
                        + " Its Accurate");

                try {
                    OLF.onLocationFound(location, getLocRegularly, gmap);
                    if (!getLocRegularly) {
                        mLocationClient
                                .removeLocationUpdates(GetCurLocation.this);
                        locationmanager.removeUpdates(LocUpByLocMgr);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

}