質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2030閲覧

onLocationChanged()が呼び出されない

atatatatata

総合スコア77

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/07/25 20:52

編集2017/07/27 12:44

##onLocationChanged()が呼ばれないのですが、どうすればいいでしょうか?
@Override
public void onConnected(Bundle bundle) {}
は、しっかり呼ばれています。

原因がわからなかったため、シンプルな、https://akira-watson.com/android/fusedlocationproviderapi.html
このURLのサイトをコピペしてアプリを別に作成し、起動させましたが、onLocationChanged()が呼ばれることはありませんでした。どうぞよろしくお願いします。

コードは上記のサイトのコピペのものを使用しているため、字数的に、Manifest.xmlと、gradleファイルのみ記載しました。

すべてのcom.android.supportライブラリは、まったく同じバージョンの仕様を使用する必要があります(ミックスバージョンはランタイムクラッシュにつながる可能性があります)。バージョン25.0.1,24.0.0が見つかりました。例としては、com.android.support:support-v4:25.0.1およびcom.android.support:palette-v7:24.0.0 less ...(⌘F1)
互換性がない、またはバグにつながるライブラリやツールやライブラリの組み合わせがいくつかあります。このような非互換性の1つは、Androidサポートライブラリの最新バージョン(または特にtargetSdkVersionよりも低いバージョン)ではないバージョンでコンパイルされています。

こんなエラーが出てます。

##Manifest.xml

java

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.android.sample.myapplication"> 4 5 <!-- ^^^ The above package name should modify to your project name. --> 6 7 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 8 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 9 10 <application 11 android:allowBackup="true" 12 android:icon="@mipmap/ic_launcher" 13 android:label="@string/app_name" 14 android:supportsRtl="true" 15 android:theme="@style/AppTheme"> 16 <meta-data 17 android:name="com.google.android.gms.version" 18 android:value="@integer/google_play_services_version" /> 19 20 <activity android:name=".MainActivity"> 21 <intent-filter> 22 <action android:name="android.intent.action.MAIN" /> 23 24 <category android:name="android.intent.category.LAUNCHER" /> 25 </intent-filter> 26 </activity> 27 <activity android:name=".LocationActivity"></activity> 28 </application> 29 30</manifest>

##Gradleアプリ

java

1 2apply plugin: 'com.android.application' 3android { 4 compileSdkVersion 25 5 buildToolsVersion "25.0.1" 6 7 defaultConfig { 8 applicationId "com.example.android.sample.myapplication" 9 minSdkVersion 24 10 targetSdkVersion 25 11 versionCode 1 12 versionName "1.0" 13 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 multiDexEnabled true 15 } 16 buildTypes { 17 release { 18 minifyEnabled false 19 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 } 21 } 22} 23 24dependencies { 25 compile fileTree(include: ['*.jar'], dir: 'libs') 26 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 27 exclude group: 'com.android.support', module: 'support-annotations' 28 }) 29 compile 'com.android.support:appcompat-v7:25.0.1' 30 testCompile 'junit:junit:4.12' 31 compile 'com.google.android.gms:play-services:9.6.1' 32 compile 'com.android.support:support-v4:25.0.1' 33 compile 'com.android.support:support-v13:25.0.1' 34}

##gradle

java

1// Top-level build file where you can add configuration options common to all sub-projects/modules. 2 3buildscript { 4 repositories { 5 jcenter() 6 } 7 dependencies { 8 classpath 'com.android.tools.build:gradle:2.3.3' 9 10 // NOTE: Do not place your application dependencies here; they belong 11 // in the individual module build.gradle files 12 } 13} 14 15allprojects { 16 repositories { 17 jcenter() 18 } 19} 20 21task clean(type: Delete) { 22 delete rootProject.buildDir 23} 24

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2017/07/26 01:01

メソッドが呼ばれないのはどのようにして確認しましたか?
atatatatata

2017/07/26 01:14

Logで確認しました。そのたアプリの説明を加えました。どうぞよろしくお願いします。
guest

回答1

0

ベストアンサー

importを確認しましょう

import com.google.android.gms.location.LocationListener;

import android.location.LocationListener;
はGPSのみの場合です

backgroundでの例はこちらにもあります
https://akira-watson.com/android/multi-runtime-permission.html


追記:
Google APIs for Android|最終更新日: 7月 26, 2017

こちらのリリースノートでは
FusedLocationProviderClient
が追加されたようです。

Google Play services updated 11 以上ではこれを使っていく方針なのでしょう
これを使うだけならばいいのですが、他のライブラリーも引きずられます
つまり、新しいビルドをする場合はこれを使う必要がある...ようです(多分)

FusedLocationProviderClient
をググっても日本語のサイトは皆無なので(韓国語、中国語はあります)
Googleのサンプル及びそのた英語の内容を読み進めるしかないでしょうね
今のところ

しかし、これは古いAPIはFusedLocationProviderApi
SDK26からは FusedLocationProviderClient
を使うという切り分けをしないといけないのか?!
という疑問が出てきます(寒気...)

投稿2017/07/26 03:29

編集2017/07/28 09:18
aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atatatatata

2017/07/26 08:28

import は、gmsの方にしてあるのですが、なぜだかonLocationChanged()が呼ばれません。 電車で移動するときに計測したのですが呼び出されませんでした。 数値の指定がおかしいのでしょうか?
aja

2017/07/26 08:47

>電車で移動するときに計測したのですが Log.vはどうやって確認したのでしょうか? 電車移動は条件が悪いので屋外の開けたところを歩いて確認した方がいいでしょうね 端末のOSは何でしょう 電話網やwifi, GPSは動作できるようになっていますか?
atatatatata

2017/07/27 03:43

Androidのnexsux5xです。wifiは接続しているのですが、携帯本体の契約はしていません。 歩いても行ったのですが、取得できませんでした。 LocationActivityのonLocationChange()が呼び出されない理由は、onLocationChange()のリスナーが設定されてないからかもしれないのではと思って、今リスナーでonClickListenerのようなものを作ろうとしていますl。
atatatatata

2017/07/27 04:29

fusedLocationProviderApi.requestLocationUpdates(mGoogleApiClient, locationRequest, listener); LocationListener listener = new LocationListener() { @Override public void onLocationChanged (Location location){ } }; このように変更したのですが、呼び出されませんでした。
atatatatata

2017/07/27 04:38

それと、textLogで、画面に表示して確認してます。
aja

2017/07/27 04:48

Log.vではないわけですね あとは、基本に戻って NexusがそもそもGoogle map使えるかとか プロジェクトを作り直してテストする Manifestの記述 HIGH_ACCURACYをCoarseに変えるなどでしょうか こちらからはコードが全て見えないのでわかりませんが 参考にされたページのコードはNexus5xで動きました(forgroundです)
atatatatata

2017/07/27 05:34 編集

ありがとうございます。自分もforground何ですが、HIGH_ACCURACYの変更では変わりませんでした。 位置情報の取得には、Google mapを使っているのでしょうか? となると、Google Maps Activityを使わないといけないのでしょうか? Empty Activityを使用しておりました。 androd端末ではgooglemapの位置情報を取得できました。
atatatatata

2017/07/27 05:14

Manifestファイルも記載しました。どうぞよろしくお願いします。
atatatatata

2017/07/27 05:39 編集

また、LocationListenerは、サンプルコードと同じく、implementsした感じでしょうか?
aja

2017/07/27 05:42

>Google Maps Activityを使わないといけないのでしょうか? いえいえ、端末位置情報使えてますか?といことです Google Maps とFusedLocationApiを組み合わせて使うのは次のステップ public class LocationActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { でいいでしょう
atatatatata

2017/07/27 06:21

また、 private LocationSource.OnLocationChangedListener onLocationChangedListener = null; @Override public void onLocationChanged(Location location) { onLocationChangedListener.onLocationChanged(location); このようなこともしてみたのですが、問題ここにはないのでしょうか?
atatatatata

2017/07/27 07:03

Google Play Servicesが必要になるので、Android SDK Managerで最新版をダウンロードし、インストールし他のですが、ダメでした。他にインストールするべきものはないでしょうか?
aja

2017/07/27 07:25

gradleはエラーになっていませんか?OSバージョンは幾つにしてビルドしているのでしょう 2つあるbuild.gradleでの設定です
atatatatata

2017/07/27 07:48

//アプリレベルです defaultConfig { minSdkVersion 16 targetSdkVersion 25 } //もう一つのgradleです。 allprojects { repositories { jcenter() } project.ext { // Important: ExoPlayer specifies a minSdkVersion of 9 because various // components provided by the library may be of use on older devices. // However, please note that the core media playback functionality // provided by the library requires API level 16 or greater. minSdkVersion=9 compileSdkVersion=25 targetSdkVersion=25 buildToolsVersion='25' releaseRepoName = getBintrayRepo() releaseUserOrg = 'google' releaseGroupId = 'com.google.android.exoplayer' releaseVersion = 'r2.3.0' releaseWebsite = 'https://github.com/google/ExoPlayer' } } エラーにはなっていません。
aja

2017/07/27 08:27

プロジェクトを新しく作り直してみてください default以外のものが入っているようなので emulatorで緯度経度を自分で送れるのでやってみたらどうでしょう
atatatatata

2017/07/27 08:40

新しく作り直しました。 https://akira-watson.com/android/fusedlocationproviderapi.html このサイト通りに、パッケージ名を変更して、LocationRequest以外はコピペで動かそうとしています。 locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(10000); locationRequest.setSmallestDisplacement(1); locationRequest.setFastestInterval(16); このように設定して30mほど歩いたのですが、 取得できませんでした。
atatatatata

2017/07/27 08:40

位置情報は、取得できています。
atatatatata

2017/07/27 08:57

互換性がない、またはバグにつながるライブラリやツールやライブラリの組み合わせがいくつかあります このようなエラーが出ています。
aja

2017/07/27 10:14

play-servicesを com.google.android.gms:play-services-location:9.+ に変えてみたらどうでしょう emulatorからのonChanedは確認できましたか
atatatatata

2017/07/27 10:44

ありがとうございます。 emulatorなのですが、Installing APKsをしています。 完了しましたら実行してみます。
atatatatata

2017/07/27 11:32

nexsus5xのエミュレーターにしたところ、やっと起動できたのですが、 onLocationChanged()は呼び出されませんでした。
atatatatata

2017/07/27 11:35

// LocationRequest を生成して精度、インターバルを設定 locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(1000); locationRequest.setFastestInterval(16); この設定で、20mぐらいを歩いているのですが、
atatatatata

2017/07/27 11:49 編集

何故か接続した途端に、一度呼ばれました。画像を質問文に載せておきます。
atatatatata

2017/07/27 11:52

外で1kぐらい歩いてきて見ます。
atatatatata

2017/07/27 12:28

1kほど歩きながら確認してきたのですが、 エミュレーターで、先ほどでたonLocationChanged()はgoogleのアメリカ本社の住所になってました。なので、移動することで呼ばれるものではありませんでした。 PCでの位置情報は、googleの本拠地から動かず、携帯に入れたアプリの方は、onLocationChanged()は呼び出されませんでしたが、「startボタン」を押すたびに、正しい位置情報を取得することができました。
atatatatata

2017/07/27 12:45

エミュレーターで、位置情報を入力したところ、onLocationChanged()が呼び出されました。 今度は、自分のつくってるアプリで同じことができるか確認して見ます。
atatatatata

2017/07/27 13:12

写真を追加したエミュレーターの、Extended controls で緯度経度を設定すると、onLocationChanged()が呼ばれました。
atatatatata

2017/07/27 13:13

これは、どのような意味をもっているのでしょうか?何故、携帯電話では、取得できなかったでしょうか?
atatatatata

2017/07/27 13:34

電波の弱いwifiに接続していたからでしょうか? 「startボタン」をおすと、新しい位置情報は取得するのですが(onLocationChanged()は呼ばれません) そして、移動しても、位置情報が更新されることはありませんでした。
atatatatata

2017/07/27 18:36

4Gのタブレットでも、500mほど歩いても、onLocatoinChanged()が呼ばれることはありませんでした。
aja

2017/07/28 04:34

1. Googleのlocation updateのサンプルがありますが、これは動いていると聞きました 最近はplay-services-locationを使うようになったので色々変わったようです https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates ちょっと大変だとは思いますが 2. フィールドテスト(実機での実際の環境でテスト)は準備と気をつけないといけないことがたくさんあります。端末が回転するとアプリがリセットされてしまうので、起動後すぐに位置情報取得するケースは何回もリセットされている可能性があります。またバックグラウンドに入るケースも別に考えないといけません 3. 基本的にログを取って何が起きているか理解するようにしないと自力で解決できません、あるいはポイントが絞られればこういったところで聞いてピンポイントで回答がえられます。 デバッグができるようになりましょう
atatatatata

2017/07/28 04:43

ありがとうございます。回転すると画面が変わるので、なんどもアプリを再起動するところからスタートするなどの方法をとりました。 そして、フォアグラウンドだけで動くシンプルなものを作りそれで実験を繰り返しました。 その結果、4Gのみだと、屋外でも違う基地局のあるところまで移動しないと、値が変更されないことを知りました。 なぜ、マップのGPSは、いっぽ動くと、map上も動く、といった形にできるのでしょうか? アドバイスをいただけないでしょうか? エミュレーターでは、onLocationChanged()を呼び出せているので、位置情報の取得の問題だと考えています。
aja

2017/07/28 04:57

>4Gのみだと、屋外でも違う基地局のあるところまで移動しないと、値が変更されないことを知りました。 Fusedlocationなので適宜使えるものを提供してくれますが、状況的にGPSが使えていないのかもしれません ビルのアーケード街とかは難しい >マップのGPSは、いっぽ動くと、map上も動く、といった形にできるのでしょうか? GPSが一番精度が高いのでベストな環境では数メートルの移動もわかります 例えばGPSだけのケースでアプリを構築すれば確認できます >onLocationChanged()を呼び出せているので 本当にちゃんとできていたのかという疑いも持っておいた方がいいでしょうね 状況をデバッグしてください Googleのサンプルに切り替えた方がいいかもしれません 何か最近変えたようなので
atatatatata

2017/07/28 05:16

ありがとうございます。 Googleのサンプルと、先ほどいただいたURLのコードは別でしょうか? 今、サンプルをコピペで、実行しようとしているところです。
atatatatata

2017/07/28 06:06

何か最近変えたようなので←とは、自分がコードを変えたということですか?
atatatatata

2017/07/28 06:20

先ほどいただいたサンプルを実行できました。これを変更して使ってみます。
atatatatata

2017/07/28 07:19

http://d.hatena.ne.jp/itog/20130526/1369580357 このようなサイトを見つけたのですが、ブロバイダと、行動認識があるのですが、先ほど教えていただいた、行動認識で、位置情報を取得できるのでしょうか?
atatatatata

2017/07/29 05:09

ありがとうございます。できました。 精度も調整してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問