2016-10-18 35 views
4

在我的應用程序中,如果用戶沒有打開位置,我正在提示一個對話框,然後嘗試通過重寫活動結果返回該結果(可能不正確)。開始解析結果片段

這是一個片段內,從而不知道如何改變的事情:

這是我如何調用它與startResolutionForResult對話框:

public void checkDeviceLocationIsOn() 
     { 
      System.out.println("Test running setting request"); 
      LocationRequest locationRequest = LocationRequest.create(); 
      locationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER); 
      LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
        .addLocationRequest(locationRequest); 
      builder.setAlwaysShow(true); //this is the key ingredient 

      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. 
          System.out.println("Test setting all fine starting location request"); 
          getLocation(); 
          break; 
         case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
          // Location settings are not satisfied. But could be fixed by showing the user 
          // a dialog. 
          try { 
           // Show the dialog by calling startResolutionForResult(), 
           // and check the result in onActivityResult(). 
           status.startResolutionForResult(getActivity(), LOCATION_SETTINGS_REQUEST_CODE); 
           System.out.println("Test setting not met starting dialog to prompt user"); 
          } catch (IntentSender.SendIntentException e) { 
           // Ignore the error. 
          } 
          break; 
         case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
          // Location settings are not satisfied. However, we have no way to fix the 
          // settings so we won't show the dialog. 
          break; 
        } 
       } 
      }); 
     } 

然後我試圖得到這樣的結果下方(這不會被調用):提前

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
     // Check for the integer request code originally supplied to startResolutionForResult(). 
      case LOCATION_SETTINGS_REQUEST_CODE: 
       switch (resultCode) { 
        case Activity.RESULT_OK: 
         System.out.println("test user has turned the gps back on"); 
         getLocation(); 
         break; 
        case Activity.RESULT_CANCELED: 

         System.out.println("test user has denied the gps to be turned on"); 
         Toast.makeText(getActivity(), "Location is required to order stations", Toast.LENGTH_SHORT).show(); 
         break; 
       } 
       break; 
     } 
    } 

感謝您的幫助

+0

爲什麼使用'System.out.println()'而不是Android' Log'類? https://developer.android.com/reference/android/util/Log.html – AdamMc331

+0

因爲它是爲我自己的測試目的 –

+0

你有沒有得到任何解決方案,我面臨同樣的問題:( – r4jiv007

回答

0

也許一個簡單的解決方案是通過使用任何對話主題的清單

<activity 
     android:name=".LocationDialogActivity" 
     android:theme="@style/DialogStyle"></activity> 

使用兩個活動,並顯示一個類似的對話框他們只是用onActivityResult當你使用它始終。

DialogActivity

private void setLocation() { 
    Intent intentResult = new Intent(); 
    intentResult.putExtra("latitude", "valueLat"); 
    intentResult.putExtra("longitude", "valueLon"); 
    setResult(RESULT_OK, intentResult); 
    finish(); 
} 

MainActivity

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //super.onActivityResult(requestCode, resultCode, data); 

     if (resultCode == RESULT_OK) { 
      /*Take your data*/ 
      latitude = data.getExtras().getString("latitude"); 
      longitude = data.getExtras().getString("longitude"); 
     } 
} 
0
超級活動

執行此方法...

在MainActivity

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    final int REQUEST_CHECK_SETTINGS = 100;//check GPS setting 
    Log.d("onActivityResult()", Integer.toString(resultCode)); 

    //final LocationSettingsStates states = LocationSettingsStates.fromIntent(data); 
    switch (requestCode) 
    { 
     case REQUEST_CHECK_SETTINGS: 
      switch (resultCode) 
      { 
       case Activity.RESULT_OK: 
       { 
        // All required changes were successfully made 
        Toast.makeText(this, "Location enabled by user!", Toast.LENGTH_LONG).show(); 
        ContactFragment.isGPSEnabled=true; 
        ContactFragment.click(); 
        break; 
       } 
       case Activity.RESULT_CANCELED: 
       { 
        // The user was asked to change settings, but chose not to 
        Toast.makeText(this, "Location not enabled, user cancelled.", Toast.LENGTH_LONG).show(); 
        ContactFragment.isGPSEnabled=false; 
        break; 
       } 
       default: 
       { 
        break; 
       } 
      } 
      break; 
    } 

} 

內ContactFragment

@Override 
public void onConnected(@Nullable Bundle bundle) { 

    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setInterval(30 * 1000); 
    mLocationRequest.setFastestInterval(5 * 1000); 

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(mLocationRequest); 
    builder.setAlwaysShow(true); 

    result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build()); 
    result.setResultCallback(this); 
} 
    @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. 
      //... 
      break; 
     case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
      // Location settings are not satisfied. But could be fixed by showing the user 
      // a dialog. 
      try { 
       // Show the dialog by calling startResolutionForResult(), 
       // and check the result in onActivityResult(). 
       status.startResolutionForResult(
         getActivity(), 
         REQUEST_CHECK_SETTINGS); 
      } catch (IntentSender.SendIntentException e) { 
       // Ignore the error. 
      } 
      break; 
     case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
      // Location settings are not satisfied. However, we have no way to fix the 
      // settings so we won't show the dialog. 
      //... 
      break; 
    } 
}