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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

2414閲覧

Activityでは、位置情報を取得できたのに、Serviceではできないです。

atatatatata

総合スコア77

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/07/29 08:33

編集2017/07/29 18:22

Serviceで、位置情報を取得したいです。

Activityでは、このようなコードで位置情報を取得できていたのですが、Serviceでは、エラーが出ます。エラーが出ます。アドバイスをいただけないでしょうか?

java

1package com.google.android.exoplayer2.demo; 2 3import android.app.Service; 4import android.content.Intent; 5import android.location.Criteria; 6import android.location.LocationManager; 7import android.os.Binder; 8import android.os.IBinder; 9import android.location.LocationListener; 10import android.content.pm.PackageManager; 11import android.location.Location; 12import android.support.v4.app.ActivityCompat; 13import android.os.Bundle; 14import android.util.Log; 15import com.google.android.gms.common.ConnectionResult; 16import com.google.firebase.database.ChildEventListener; 17import com.google.firebase.database.DataSnapshot; 18import com.google.firebase.database.DatabaseError; 19import com.google.firebase.database.DatabaseReference; 20import com.google.firebase.database.FirebaseDatabase; 21import com.google.firebase.auth.FirebaseAuth; 22 23public class GpsService extends Service implements LocationListener{ 24 25 private boolean mResolvingError = false; 26 final FirebaseDatabase database = FirebaseDatabase.getInstance(); 27 private LocationListener sensorEventListener; // onPause() 28 29 public class GpsServiceBinder extends Binder { 30 public GpsService getService() { 31 return GpsService.this; 32 } 33 } 34 35 @Override 36 public void onCreate() { 37 super.onCreate(); 38 39 Log.d("onCreate()","呼ばれた"); 40 } 41 42 43 44 public GpsService() { 45 } 46 47 //serviceだからいらないかも removeupdatesは必要 48// @Override 49// protected void onPause(){ 50// super.onPause(); 51// locationManager.removeUpdates(this); 52 // mLocationManager.removeUpdates(listener); 53// } 54 55 protected void initLocationService() { 56 Log.v("initLocationService()", "呼ばれた"); 57 58 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) { 59 return; 60 } 61 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) { 62 return; 63 } 64 65 Criteria criteria = new Criteria(); 66 criteria.setAccuracy(Criteria.ACCURACY_FINE); //setAccuracyは内部では、https://stackoverflow.com/a/17874592/1709287の用にHorizontalAccuracyの設定に変換されている。 67 criteria.setPowerRequirement(Criteria.POWER_HIGH); 68 criteria.setAltitudeRequired(false); 69 criteria.setSpeedRequired(true); 70 criteria.setCostAllowed(true); 71 criteria.setBearingRequired(false); 72 criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 73 criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH); 74 75// locationManager.registerGnssStatusCallback() 76// locationManager.requestLocationUpdates(gpsFreqInMillis, gpsFreqInDistance, criteria, this, null); 77 78 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 79 String bestProvider = locationManager.getBestProvider(criteria, true); 80 locationManager.requestLocationUpdates(bestProvider, 6000, 1, this); 81 } 82 83 @Override 84 public void onLocationChanged(Location location) { 85 86 Log.v("onLocationChanged", "呼ばれた"); 87 refreshGeoLocation(location); 88 } 89 90 //LocationListenerのメソッド 91 @Override 92 public void onStatusChanged(String provider, int status, Bundle extras) { 93 94 } 95 96 @Override 97 public void onProviderEnabled(String provider) { 98 99 } 100 101 @Override 102 public void onProviderDisabled(String provider) { 103 104 } 105 106 107 //ここまで 108 109 // 位置情報のリスナーを取得して登録する 110 //sensorEventListener = new GpsLocationListener(sensorValueTextView); 111 112 113// public class LocationServiceBinder extends Binder { 114// public com.google.android.exoplayer2.demo.GpsService getService() { 115// return com.google.android.exoplayer2.demo.GpsService.this; 116// } 117// } 118 protected void refreshGeoLocation(Location location){ 119 Log.v("refreshGeoLocation","呼ばれた"); 120 String user = FirebaseAuth.getInstance().getCurrentUser().getUid(); 121 DatabaseReference ref = database.getReference().child("users").child(user); 122 DatabaseReference latitudeRef = ref.child("latitude"); 123 DatabaseReference longitudeRef = ref.child("longitude"); 124 latitudeRef.setValue(location.getLatitude()); 125 longitudeRef.setValue(location.getLongitude()); 126 } 127 128 @Override 129 public IBinder onBind(Intent intent) { 130 Log.v("onBind","呼ばれた"); 131 throw new UnsupportedOperationException("Not yet implemented"); 132 } 133 134 private void startLocation() { 135 136 Log.d("StartLocation","呼ばれた"); 137 initLocationService(); 138 } 139 140 private void stopLocation() { 141 Log.d("stopLocation","呼ばれた"); 142 //firebase.auth().signOut();これでログアウトはできるが、ログアウトはしない 143 database.goOffline(); 144 } 145 146 //private final LocationListener listener = new LocationListener() { 147 @Override 148 public int onStartCommand(Intent intent, int flags, int startId) { 149 Log.d("onStartCommand","呼ばれた"); 150 151 String check =intent.getStringExtra("start/stop"); 152 153 if(check.equals("start")){ 154 startLocation(); 155 Log.d("StartLocation","呼ぶ"); 156 }else if(check.equals("stop")){ 157 stopLocation(); 158 Log.d("StopLocation","呼ぶ"); 159 } 160 161 return super.onStartCommand(intent, flags, startId); 162 } 163 164 @Override 165 public void onDestroy() { 166 super.onDestroy(); 167 } 168 169 public void movieAdapter(DatabaseReference ref) { 170 ChildEventListener childEventListener = new ChildEventListener() { 171 172 @Override 173 public void onChildAdded(DataSnapshot dataSnapshot, String s) { 174 175 } 176 177 //ここで、firebaseの変化を取得して、Toastを表示する 178 @Override 179 public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) { 180 //``` 181 Log.v("onChildChanged()","呼ばれた"); 182 } 183 184 @Override 185 public void onChildRemoved(DataSnapshot dataSnapshot) { 186 Log.v("onChildRemoved()","呼ばれた"); 187 } 188 189 @Override 190 public void onChildMoved(DataSnapshot dataSnapshot, String s) { 191 Log.v("onChildMoved()","呼ばれた"); 192 193 } 194 195 @Override 196 public void onCancelled(DatabaseError databaseError) { 197 Log.v("onCancelled()","呼ばれた"); 198 } 199 }; 200 ref.addChildEventListener(childEventListener); 201 } 202} 203 204

java

107-30 03:21:01.964 5676-5676/com.google.android.exoplayer2.demo D/onCreate(): 呼ばれた 207-30 03:21:01.965 5676-5676/com.google.android.exoplayer2.demo D/onStartCommand: 呼ばれた 307-30 03:21:01.965 5676-5676/com.google.android.exoplayer2.demo D/StartLocation: 呼ばれた 407-30 03:21:01.965 5676-5676/com.google.android.exoplayer2.demo V/initLocationService(): 呼ばれた 507-30 03:21:01.975 5676-5676/com.google.android.exoplayer2.demo D/StartLocation: 呼ぶ

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

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

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

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

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

guest

回答1

0

ベストアンサー

requestLocationUpdatesの第4引数はLocationListenerです。

GpsServiceに実装しているか確認してください。

投稿2017/07/29 09:14

yona

総合スコア18155

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

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

atatatatata

2017/07/29 11:49 編集

implementしているのですが、 それではダメなのでしょうか?
atatatatata

2017/07/29 11:49 編集

他にやることがあるのでしょうか? ```
atatatatata

2017/07/29 11:54

なぜ、サンプルでは、this との表記でいけているのかがわかりません。
yona

2017/07/29 12:23

コードの一部分だけではわかりません。 また、サンプルでできるのになぜ自分ができないかは、サンプルと一言一句同じコードを書いていないからですよ。thisは文脈で意味が変わる構文です。
atatatatata

2017/07/29 12:26

//import com.google.android.gms.location.LocationListener; import android.location.LocationListener; サンプルコードは、下のlocationListenerを使っていました。自分も下のに変更したんですが、gmsの方でもできるのでしょうか? thisの周りのコードを載せます。
yona

2017/07/29 13:04

GpsServiceにLocationListenerを実装している証拠としてGpsServiceの宣言部分を追記してください。 また、AndroidSDKのLocationManagerとFusedLocationProviderApiのどちらを使うつもりですか? サンプルコードをたくさん見過ぎてわけがわからなくなっていませんか。
atatatatata

2017/07/29 13:15

wifiで、位置情報を取得する必要がなくなったため、LocationListenerだけで行います。 コードを整理したので、一度、Service全体のコードをあげます。 よろしくお願いします。
atatatatata

2017/07/29 13:23

いえ、間違えてました。4Gでの取得はしたいので、 FusedLocationProviderApiでした。 そうなると、色々とコードに変更が必要になりますでしょうか。
atatatatata
yona

2017/07/29 15:43

とても中途半端なコードです。 やりたいことを整理しLocationManagerとFusedLocationProviderApiのどちらを使用するかを決めてコードを最初から作り直した方がいいですよ。 また、解決を焦っているようですが、問題を放置して前に進んでも問題から問題が派生するだけで何も解決しません。
atatatatata

2017/07/29 17:07 編集

途中から、かなりのサンプル量のLocationManagerを見ていたので、LocationManagerは、機能するコードになってると思っています。 Fusedの方の消すべきコードを消しました。 なぜか、startLocation()を呼び出すところで止まってしまいます。 なぜLocationManagerが機能しない、または、Serviceが機能せずに、startFusedLocation()が呼び出されないのかを教えていただけないでしょうか?
yona

2017/07/29 18:10

onStartCommandは呼ばれていますか? また、FusedLocationは一切つかわないんですよね?それならメソッド名を変更するべきです。
atatatatata

2017/07/29 18:22

メソッド名を変更しました。失礼しました。 onStartCommandは呼ばれています。。
atatatatata

2017/07/29 18:50

全てのメソッドが呼ばれました。 そして、バックグラウンドでうまく実行させられました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問