2014-10-16 5 views
1

나는 항상 백그라운드에서 실행되며 gps 좌표를 sms를 통해 일정 시간 후에 전송하는 앱에 문제가 있습니다. 전화가 다시 시작되면 앱이 다시 시작되어야합니다. 런처 활동없이 자동으로 시작하십시오. 갑자기 gps가 활성화되었을 때 내 앱이 안드로이드 kitkat에서 위치 정보를 얻고 GPS가 비활성화되면 젤리 빈에서 작동한다는 문제가 발생합니다. 나는 정말로 그것에 대해 혼란 스럽다. 친절하게 내가 어디에 잘못되었는지 말해 주시고 어떻게 고칠 지 제안 해주십시오.wifi로 위치가 있지만 GPS가없는 경우

필요한 모든 권한이 매니페스트 파일에 추가됩니다

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) { 

    } 
}; 

}

내 수신기 클래스

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(); 

}.

답변

0

이렇게하면 문제를 해결하는 데 도움이되기를 바랍니다. 사용하면 와이파이 및 인터넷으로의 getLocation을 원하는 원하는이 클래스,

호출이 방법 // *** 새로운 GetCurLocation (getActivity(), 0, 사실, 널 (null)이, 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(); 
     } 
    } 
}; 

}

+0

덕분에 나는 GPS로 위치를 확인하고 싶습니다. 네트워크 또는 무선 랜을 사용할 수 있는지 여부는 신경 쓰지 않습니다. –

+0

이 방법을 사용하면 interent에 의해 getlocation을 수행 할 수 있습니다. 누군가가 도울 것이며, 그것을 확인하고 대답을 받아 들일 수 있기를 바랍니다. – Saveen