2016-10-04 16 views
1

私の活動を開始するとき、私は彼のGPSを使用して、ユーザーの位置を取得したいと思います。 GPSがオンになっていない場合は、特定の機能を利用するためにgpsをオンにするようトーストを表示します。GPSを起動した直後に場所を取得

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mGoogleApiClient = new GoogleApiClient 
      .Builder(this) 
      .enableAutoManage(this, 34992, this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 


    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 50,SelectCinemaActivity.this); 
    // Define the criteria how to select the locatioin provider -> use default 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    location = locationManager.getLastKnownLocation(provider); 



    setContentView(R.layout.fragment1); 

    requestLocation(); 
    locationChecker(mGoogleApiClient, Activity.this); 

    ... 
} 

マイrequestLocation()関数

public void requestLocation(){ 

    // Initialize the location fields 
    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     latitudeActuelle = location.getLatitude(); 
     longitudeActuelle = location.getLongitude(); 
     try { 
      initList(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     System.out.println("Location not available"); 

     try { 
      initListWithoutDistance(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

、ここでトーストとlocationChecker:

public void locationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) { 
    LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(30 * 1000); 
    locationRequest.setFastestInterval(5 * 1000); 
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(locationRequest); 
    builder.setAlwaysShow(true); 
    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      final LocationSettingsStates state = result.getLocationSettingsStates(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        // All location settings are satisfied. The client can initialize location 
        // requests here. 
        Log.i("SUCCESS", String.valueOf(status.getStatusCode())); 
        requestLocation(); 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        // Location settings are not satisfied. But could be fixed by showing the user 
        // a dialog. 

        Log.i("RES REQUIRED", String.valueOf(status.getStatusCode())); 
        try { 
         // Show the dialog by calling startResolutionForResult(), 
         // and check the result in onActivityResult(). 
         status.startResolutionForResult(
           activity, 1000); 
        } catch (IntentSender.SendIntentException e) { 
         // Ignore the error. 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 

        Log.i("UNAIVALEBLE", String.valueOf(status.getStatusCode())); 
        // Location settings are not satisfied. However, we have no way to fix the 
        // settings so we won't show the dialog. 
        try { 
         initListWithoutDistance(); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        break; 
      } 
     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case REQUEST_CHECK_SETTINGS: 
      switch (resultCode) { 
       case Activity.RESULT_OK: 
        // All required changes were successfully made 
        Log.i("IL CLIQUE", "OK"); 
        location = locationManager.getLastKnownLocation(provider); 
        Log.i("OK CLICK", String.valueOf(location)); 
        break; 
       case Activity.RESULT_CANCELED: 
        // The user was asked to change settings, but chose not to 
        Log.i("IL CLIQUE", "CANCEL"); 
        try { 
         initListWithoutDistance(); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        break; 
       default: 
        break; 
      } 
      break; 
    } 
} 

initListとinitListWithoutDistanceはソート距離または名前でつながる2関数です。

GPSがアクティブなときは問題ありません。 GPSがオフになっているときに「OK」ボタンをクリックすると、即座に現在地を取得できません。私はlocation = locationManager.getLastKnownLocation(プロバイダー)を呼び出してonLocationChangedイベントを取得しようとしました。ですが、結果はnullです。私はロケーションオブジェクトを持っていないので、onLocationChanged関数を直接呼び出すことはできません。

数秒後(時には2時には20 ...)、イベントが起動され、結果が試されます。

このイベントを強制し、ユーザーが「OK」ボタンをクリックした直後に現在の場所を取得する方法はありますか?

+3

私は、場所を取得するのに時間がかかると思っていますか?多分それはあなたの場合の問題です...私はトーストを見ていない、正確にどこですか? –

+1

_I onLocationChanged ...関数を直接呼び出すことはできません。それはどのように動作するのではありません。このイベントを強制し、ユーザーが「OK」ボタンをクリックした直後に現在の場所を取得する方法はありますか?_いいえ、それはどのように動作しますか?あなたは待つ必要があります。詳細は[こちら](http://stackoverflow.com/questions/1513485/how-do-i-get-the-current-gps-location-programmatically-in-android)および[公式ドキュメント]( https://developer.android.com/guide/topics/location/strategies.html#Updates).. –

答えて

4

このイベントを強制し、ユーザーが「OK」ボタンをクリックした直後に現在の位置を取得する方法はありますか?

いいえGPS自体に初期の位置情報を取得するまでに時間がかかります。これは、AndroidやGPSに関するすべてのこととはまったく関係がありません。

関連する問題