2016-04-05 26 views
-2

私のアプリケーションでは、gps設定ページが有効になっていない場合は開きます。 Googleで検索したときにこれを行うには、ほとんどの人がこのコードが機能するはずだと言います。GPS設定が起動しないandroid

コードは、このページを開くこと
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 

enter image description here

あなたは赤いボックスでわかるように、場所の設定がONになっています。しかし、私が緯度と経度の値を取得すると、nullを返します。 GPS設定を有効にするには、緑のボックスで[GPS]ボタンをクリックする必要があることに気付きました。しかし、私はそれをプログラムで行うことができますか?つまり、startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));は実際にGPS設定を開きません。私はエミュレータを使用しているからですか?私のGPSは実際には有効になっていません。

enter image description here

任意のアイデア?事前に感謝します

答えて

0

あなたの位置の設定のページにしたい場合のみあなたのコードが動作します。ユーザーに尋ねることなくプログラムでGPSをオンにする方法があります。私はまた私の仕事の1つでこの問題を抱えていました。私はLocationServices.SettingsApi.checkLocationSettingsの使い方で解決策を見つけました。今、私はあなたがボタンを持っていると言うと、あなたは、このボタンをクリックしたとき、GPS

enableGPS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     showLocationEnableDialog(); 
    } 
}); 
を有効にするには、場所のポップアップを表示したい、それがステップ

  1. レッツバイステップでどのように使用する方法を紹介しようとしますあなたはGoogleApiClientがnullかどうかであり、それがnullの場合、あなたはshowLocationEnableDialog()

    public void showLocationEnableDialog() { 
    if (googleApiClient == null) { 
        googleApiClient = new GoogleApiClient.Builder(getActivity()) 
          .addApi(LocationServices.API) 
          .build(); 
        googleApiClient.connect(); 
    
        createLocationRequest(); 
        PendingResult<LocationSettingsResult> result = 
          LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build()); 
        result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
         @Override 
         public void onResult(LocationSettingsResult result) { 
          setCallback(result); 
         } 
        }); 
    } 
    

    }でインスタンスを作成する必要がありますチェックする必要があり、このボタンをクリックした後

  2. あなたは最後のステップは、私たちの活動のonActivityResultにキャッチstatus.startResolutionForResult(getActivity(), MainActivity.REQUEST_CHECK_SETTINGS);でごcreateLocationRequest()setCallback()方法

    private void createLocationRequest() { 
        LocationRequest locationRequest = LocationRequest.create(); 
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
        locationRequest.setInterval(10 * 1000); 
        locationRequest.setFastestInterval(5 * 1000); 
        builder = new LocationSettingsRequest.Builder() 
          .addLocationRequest(locationRequest); 
        builder.setAlwaysShow(true); //this is the key ingredient 
    } 
    
    private void setCallback(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(), MainActivity.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; 
        } 
    } 
    
  3. を定義する必要があります。ここでの重要なポイントここでは、このコードをフラグメントに使用しています。したがって、アクティビティでこのコードを使用する場合は、getActivity()をアクティビティのコンテキストに置き換える必要があります。また、REQUEST_CHECK_SETTINGSが、これはとても便利ですpublic static final int REQUEST_CHECK_SETTINGS = 0x1;

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    
        switch (requestCode) { 
        // Check for the integer request code originally supplied to startResolutionForResult(). 
         case REQUEST_CHECK_SETTINGS: //int REQUEST_CHECK_SETTINGS = 0x1; 
          switch (resultCode) { 
           case Activity.RESULT_OK: 
           //user enabled GPS, you can do your GPS operation here again 
           break; 
           case Activity.RESULT_CANCELED: 
           // On pop-up user clicked cancel 
           break; 
          } 
         break; 
         } 
    } 
    
+0

おかげに等しいです。実際に私はプログラムでGPSをオンにしたくなかった。私はちょうど実際のGPS設定ページ(私のポストの2番目の画像)を開きたいと思っていました。私はあなたが私の郵便で見ることができるように緑色のボックス内のGPSボタンをクリックし、手動でGPSをオンにすると、プログラムは私に経度と緯度の値を与えます。 **しかし、私はどのようにプログラムでそのページを開くことができますか?**私が使ったコードは、実際に私が経度と緯度の値を得ることができない別のページを開きます。 – Hilal

+0

実際のデバイスでテストすることをお勧めします.Geymotionを使用しているため、ハードウェアに関連するすべての機能が正しく動作しませんでした。私は 'Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);を使います。 startActivity(viewIntent); 'それは私のアプリケーションで正しく働いています。 –

+0

はい、今私はまた、問題がgenymotionのためだと思います。なぜなら私はGoogleで検索したので、誰もこの問題を言及していないからです。全てに感謝.. – Hilal

関連する問題