2016-08-30 6 views
0

GPSの場所が必要なアプリを開発しましたが、その場所が有効になっていない場合は、有効にする設定にユーザーをリダイレクトします。位置の許可を許可してから速すぎます。場所が見つかりません

私はそれをすばやくしないとすべてうまくいきますが、設定メニューが開いたときに私はそれをアクティブにしてすぐにヌルの場所になるアプリに戻ります。

「アプリケーションが場所を取得するのを待ちますか?」

EDIT

08-30 14:48:35.094 6878-6878/d.g.movida E/AndroidRuntime: FATAL EXCEPTION: main 
                 Process: d.g.movida, PID: 6878 
                 java.lang.RuntimeException: Unable to resume activity {d.g.movida/d.g.movida.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference 
                  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4156) 
                  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:158) 
                  at android.app.ActivityThread.main(ActivityThread.java:7229) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLongitude()' on a null object reference 
                  at d.g.movida.MainActivity.updateList(MainActivity.java:121) 
                  at d.g.movida.MainActivity.onResume(MainActivity.java:342) 
                  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1286) 
                  at android.app.Activity.performResume(Activity.java:6987) 
                  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4145) 
                  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)  
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)  
                  at android.os.Handler.dispatchMessage(Handler.java:102)  
                  at android.os.Looper.loop(Looper.java:158)  
                  at android.app.ActivityThread.main(ActivityThread.java:7229)  
                  at java.lang.reflect.Method.invoke(Native Method)  
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  

ネットワーク/ GPSが位置を読み取る前に有効になっており、それがされた場合、私は確認してください。

次に、取得する前に場所がnullかどうかを確認します(このエラーが発生すると無効になります)。

+0

-1の理由を詳細に説明できますか? – DomeWTF

+1

あなたはnull例外を取得するコードを投稿してくださいできますか? –

答えて

0

以下はこの問題を解決するために使用したコードです。別の関数で呼び出される必要があります。呼び出しが行われる前に初期化されていることを保証します。

たとえば、私のアプリはGoogleマップを使い、onMapReadyコールバックでこの関数を呼び出します。

これは、ユーザーが設定アクティビティを意図しているのではなく、有効にする場所を尋ねるのに適した方法です。

public void requestLocationPermissions() { 

    mGoogleApiClient = new GoogleApiClient.Builder(getContext()) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this).build(); 
    mGoogleApiClient.connect(); 

    LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); 
    locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); 

    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 locationSettingsResult) { 
      final Status status = locationSettingsResult.getStatus(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        Log.i(TAG, "All location settings are satisfied."); 
        //startLocationUpdates(); 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" + 
          "upgrade location settings "); 

        try { 
         // Show the dialog by calling startResolutionForResult(), and check the result 
         // in onActivityResult(). 
         status.startResolutionForResult(getActivity(), 1000); 

        } catch (IntentSender.SendIntentException e) { 
         Log.i(TAG, "PendingIntent unable to execute request."); 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + 
          "not created."); 
        break; 
      } 
     } 
    }); 
} 
+0

私はそれを試し、あなたに戻ってきます、ありがとう。 – DomeWTF

関連する問題