2012-01-09 1 views
0

하이 제대로 작동 방송 Receiver.its를 사용하여 GPS 위치를 얻기 위해 노력하고 있어요,하지만 난 위치의 위도와 경도 값이gps를 확인하는 방법 브로드 캐스트 수신기를 사용하여 한 시간 반 추적?

을 변경하는 경우 ** 30mts의 .I 가지고 ** MINIMUM_TIME_BETWEEN_UPDATES을 사용 그레그 매 30 분을 얻으려면

갱신

public class MainActivity extends Activity implements LocationListener { 
final DBAdapter1 db=new DBAdapter1(this); 
    private ConnectivityReceiver receiver = null; 
    private TextView txtNetworkInfo ; 
    private static TextView latituteField; 
    private static TextView longitudeField; 
    private LocationManager locationManager; 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     private static final String HostUrl =" http://xxx/Service.svc"; 
    // private static final String HostUrl =" http://yyyService.svc"; 
     private static final String NAMESPACE = "http://tempuri.org/"; 
     private HttpTransportSE httpTransport = new HttpTransportSE(HostUrl); 
    private String provider; 
    private SoapObject request=null; 
    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1800000; // in Milliseconds 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    latituteField = (TextView) findViewById(R.id.TextView02); 
    longitudeField = (TextView) findViewById(R.id.TextView04); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // Define the criteria how to select the locatioin provider -> use 
    // default 
    Criteria criteria = new Criteria(); 
    Log.i("ConnTest",locationManager.toString()); 
provider = locationManager.getBestProvider(criteria, false); 
Location location = locationManager.getLastKnownLocation(provider); 

// Initialize the location fields 
if (location != null) { 
    System.out.println("Provider " + provider + " has been selected."); 
    float lat = (float) (location.getLatitude()); 
    float lng = (float) (location.getLongitude()); 
    latituteField.setText(String.valueOf(lat)); 
    longitudeField.setText(String.valueOf(lng)); 

} else { 
    latituteField.setText("provider not available"); 
    longitudeField.setText("provider not available"); 
} 

    txtNetworkInfo = (TextView)findViewById(R.id.txtNetworkInfo); 

    receiver = new ConnectivityReceiver(); 

      registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 


} 
@Override 
protected void onResume() { 
    super.onResume(); 
    //locationManager.requestLocationUpdates(provider,1000, 1, this); 
    locationManager.requestLocationUpdates(
      provider, 
      MINIMUM_TIME_BETWEEN_UPDATES, 
      MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
      this 
    ); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    float lat = (float) (location.getLatitude()); 
    float lng = (float) (location.getLongitude()); 
    longitudeField.setText(String.valueOf(lng)); 
    latituteField.setText(String.valueOf(lat)); 

} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Disenabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 
protected void Display(Cursor c) { 
    Toast.makeText(this, "rowid: " + c.getString(0) + "\n" + 
    "Latitude: " + c.getString(1) + "\n" + "Longitude: " + c.getString(2) + "\n" + 
    Toast.LENGTH_LONG, 0).show();  
} 

@Override 
    protected void onDestroy() { 
      unregisterReceiver(receiver); 

      super.onDestroy(); 
    } 

private String getNetworkStateString(NetworkInfo.State state){ 
    String stateString = "Unknown"; 

    switch(state) 
    { 
      case CONNECTED:   stateString = "Connected";    break; 
      case CONNECTING:  stateString = "Connecting";  break; 
      case DISCONNECTED:  stateString = "Disconnected"; break; 
      case DISCONNECTING:  stateString = "Disconnecting"; break; 
      case SUSPENDED:   stateString = "Suspended";    break; 
      default:      stateString = "Unknown";    break; 
    } 

    return stateString; 
} 

    private class ConnectivityReceiver extends BroadcastReceiver{ 

      private Timer mTimer; 
      private TimerTask mTimerTask; 

      @Override 
      public void onReceive(Context context, Intent intent) { 
        NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 

        if(null != info) 
        { 
          String state = getNetworkStateString(info.getState()); 
          if(state.equals("Connected")){ 
            try{ 
             mTimer = new Timer(); 
             mTimer.scheduleAtFixedRate(mTimerTask,1000,1800000); 
             mTimerTask = new TimerTask() { 

              @Override 
              public void run() { 
               SoapPrimitive response=null; 
               final String methodname="InsertAllGPSInformation"; 
                request = new SoapObject(NAMESPACE,methodname); 
                envelope.dotNet = true; 
                request.addProperty("Longitude",longitudeField.getText().toString()); 
                request.addProperty("Latitude",latituteField.getText().toString()); 
                request.addProperty("Date",newtime); 

                envelope.setOutputSoapObject(request); 
                String result = null; 
                try 
                {   
                 httpTransport.call(NAMESPACE+"IService/"+methodname, envelope); 
                 response = (SoapPrimitive)envelope.getResponse(); 
                 result=response.toString(); 
                } 
                catch(Exception e) 
                { 
                 Toast.makeText(getBaseContext(), "Your Net Connected or Not Login to Net"+"", Toast.LENGTH_LONG).show(); 
                 Log.e("Upload Picture Error:",e.getMessage()); 
                } 
                           } 
             }; 
            } 
            catch(Exception e) 
            { 
             Toast.makeText(getBaseContext(),e.getMessage()+"", Toast.LENGTH_LONG).show(); 
             Log.e("Upload Picture Error:",e.getMessage()); 
            } 

답변

0

나는 질문은 생각 "왜 30 분마다보다 많은 업데이트를받을 수 있나요?"

그런 해답이 될 것 "통지의 최소 시간 간격에서 밀리 초.이 입력란은 전원 절약을위한 힌트이며 위치 업데이트 간의 실제 시간은이 값보다 크거나 작을 수 있습니다. " http://developer.android.com/reference/android/location/LocationManager.html

또는 처리기를 사용하거나 30 분마다 알람을 트리거하고 알람이 울릴 때 단일 위치 업데이트를 요청할 수 있습니다. API 9부터는 requestSingleUpdate()가 있습니다.

+1

선생님 연속적으로 값 – Mercy

0

알람 관리자를 사용하십시오. 너의 타이머가 죽을 수 있기 때문에. 하지만 알람이 앱을 깨울 것입니다. 이 작업 코드를보십시오 : 그것은 10 분마다 CPU를 깨우고 알림을 보여줍니다.

Manifest.xml에 추가

... 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
... 
<receiver android:process=":remote" android:name="Alarm"></receiver> 
... 

코드 : 나의 code.kindly it.it도 제공 참조 업데이트됩니다 그레그 전 매 30 시간 타이머 기능을 시도

public class Alarm extends BroadcastReceiver 
{  
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG"); 
     wl.acquire(); 

    // Put here YOUR code. 
    Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

    wl.release(); 
} 

public void SetAlarm(Context context) 
{ 
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, Alarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute 
} 

public void CancelAlarm(Context context) 
{ 
    Intent intent = new Intent(context, Alarm.class); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 
} 
+0

@xxxx It 실행 시간이 한 번만 – Mercy

관련 문제