更新1:コードは実際には動作するが、場所を使用する許可は求められませんでした。アプリのアクセス権にアクセスし、手動で場所のアクセス権を付与すると機能します。私はそれが実行時に場所のアクセス許可を求めるようにする方法をまだ知りません。融合ロケーションプロバイダは一部の携帯電話でしか動作しません
私は融合位置プロバイダについて学び、ちょうど緯度と経度を表示するアプリを作った。私はLG G4 6.0を使用しており、この偉大なYouTube Tutorialに従っていますが、私はそれを携帯電話で実行すると、ちょうどgpsの座標ではなく、緯度と経度のテキストが表示されます。私はそれをMotorolla X 2015とMoto Droid Turboでテストしています。
コンパイルSDKのバージョン:7.0
Gradleのバージョン:2.14.1
Androidのプラグインのバージョン:2.2.0
ビルドツールのバージョン:24.0.2
マニフェスト:
<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.nathan.gpstest">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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>
受け台依存:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
//compile 'com.google.android.gms:play-services:9.6.1'
compile 'com.google.android.gms:play-services-location:9.6.1'
}
MainActivity:私のアプリは、私のデバイスのほとんどで実行する場所
package com.example.nathan.gpstest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.FusedLocationProviderApi;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
TextView latitudeText;
TextView longitudeText;
private FusedLocationProviderApi locationProvider = LocationServices.FusedLocationApi;
private GoogleApiClient googleApiClient;
private LocationRequest locationRequest;
private double myLatitude;
private double mylongitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
latitudeText = (TextView) findViewById(R.id.tvLatitude);
longitudeText = (TextView) findViewById(R.id.tvLongitude);
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
locationRequest = new LocationRequest();
locationRequest.setInterval(10 * 1000);
locationRequest.setFastestInterval(15 * 1000);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
}
@Override
public void onConnected(Bundle bundle) {
requestLocationUpdates();
}
private void requestLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
latitudeText.setText("Connection Suspended");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
latitudeText.setText("Connection Failed");
}
@Override
public void onLocationChanged(Location location) {
myLatitude = location.getLatitude();
mylongitude = location.getLongitude();
latitudeText.setText("Latitude : " + String.valueOf(myLatitude));
//latitudeText.setText("Latitude : " + String.valueOf(myLatitude));
longitudeText.setText("Longitude : " + String.valueOf(mylongitude));
}
@Override
protected void onStart() {
super.onStart();
googleApiClient.connect();
}
@Override
protected void onResume() {
super.onResume();
if (googleApiClient.isConnected()) {
requestLocationUpdates();
}
}
@Override
protected void onPause() {
super.onPause();
LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
}
@Override
protected void onStop() {
super.onStop();
googleApiClient.disconnect();
}
}
リンク[実行時のアクセス権の要求](https://developer.android.com/training/permissions/requesting.html)、[サンプル使用法](https://github.com/commonsguy/cw-omnibus/blob/master) /Location/FusedNew/app/src/main/java/com/commonsware/android/weather2/AbstractGoogleApiClientActivity.java) – Blackkara