Serviceで、位置情報を取得して、変更されたら、firebaseに書き込むコードを書いたのですが、
public int onStartCommand(Intent intent, int flags, int startId) {
の中で、startLocation()を呼び出そうとしても呼び出せません。
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/29 18:50