2017-02-09 8 views
0

私はマップの活動にマーカーを置くためにユーザーの場所を使用するか、この場合は緯度と経度を印刷する、アンドロイドアプリを作成しようとしています。しかし、私はチュートリアルや私のために働く以前の質問を見つけることができません。私は、位置オブジェクトまたは緯度と経度の形でgpsを使用して、ユーザーの現在地を取得する最も簡単な方法を探しています。現在のGPSの場所を取得するアンドロイドスタジオ

public class MainActivity extends AppCompatActivity 
     implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { 
    private TextView lat, lng; 
    private GoogleApiClient mGoogleApiClient; 
    private Location mCurrentLocation; 
    private boolean mRequestingLocationUpdates; 
    private LocationRequest mLocationRequest; 

    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lat = (TextView) findViewById(R.id.lat); 
     lng = (TextView) findViewById(R.id.lng); 

     // Create an instance of GoogleAPIClient. 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 
     } 
    } 

    protected void onStart() { 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    protected void onStop() { 
     mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     if (mGoogleApiClient.isConnected() && !mRequestingLocationUpdates) { 
      startLocationUpdates(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     stopLocationUpdates(); 
    } 

    protected void stopLocationUpdates() { 
     LocationServices.FusedLocationApi.removeLocationUpdates(
       mGoogleApiClient, this); 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(
       mGoogleApiClient); 
     if (mCurrentLocation != null) { 
      lat.setText(String.valueOf("Lat: " + mCurrentLocation.getLatitude())); 
      lng.setText(String.valueOf("Lng: " + mCurrentLocation.getLongitude())); 
     } 
     else 
      Log.i("Problem", "mCurrentLocation is null"); 

     if (mRequestingLocationUpdates) { 
      startLocationUpdates(); 
     } 
    } 

    protected void startLocationUpdates() { 
     LocationServices.FusedLocationApi.requestLocationUpdates(
       mGoogleApiClient, mLocationRequest, this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mCurrentLocation = location; 
     updateUI(); 
    } 

    private void updateUI() { 
     lat.setText(String.valueOf("Lat: " + mCurrentLocation.getLatitude())); 
     lng.setText(String.valueOf("Lng: " + mCurrentLocation.getLongitude())); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 
} 

と私のAndroidManifest.xmlではありません:次のように私の現在のコードでは直接this tutorialから、私はいつも「mCurrentLocationがnullである」ログメッセージを取得するように見える

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.root.locationtest"> 

    <meta-data android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="LocationTest" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

、そうでは何もアプリの変更。また、mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);行に、「呼び出しにはユーザーが拒否する許可が必要」という警告が表示されます。何か助けていただければ幸いです。事前に感謝します。

はEDIT:この警告を解決する

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == 
       PackageManager.PERMISSION_GRANTED) 

: 私はすべての行を囲むif文で「コールユーザーによって拒否することができる権限が必要です」。ただし、onConnect()メソッドでアクセス権が拒否され、mCurrentLocationがnullのままです。

+0

AndroidManifest.xmlファイルを追加してください。 – user2025187

+0

この回答で私のチュートリアルを試してみてください。これはあなたの現在の位置、緯度、経度を取得するのに役立ちます、それはまたあなたの現在の緯度と経度をリアルタイムで更新します。 http://stackoverflow.com/a/42131361/4201474 – TranHieu

答えて

0

コールには、ユーザーが拒否する可能性のあるアクセス許可が必要です。このエラーは、実行時にユーザーから許可を得るために必要なアンドロイドの上位バージョンによるものです。マニフェストで宣言するだけでは役に立ちません。したがって、アクセス許可のコードを追加する必要があります。

関連する問題