GoogleApiClient を使用して Service クラスで現在の位置を取得しています。起動中にモバイルの位置情報サービスのステータスを取得したいのですが、位置情報サービスが無効になっている場合は、ポップアップを表示して有効にします。
では、 GoogleApiClientを使用して位置情報サービスのステータスを確認するにはどうすればよいですか
ここに私のサービスクラスがあります
public class MyService extends Service implements LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private static final long INTERVAL = 1000 * 300;
private static final long FASTEST_INTERVAL = 1000 * 200;
public MyService() {
super();
}
@Override
public void onCreate() {
super.onCreate();
//initialize location request
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
//initialize GooleApiClient
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
//code to find nearby using TimerTask
Timer timer = new Timer();
TimerTaskFindNearby findNearby = new TimerTaskFindNearby(getApplicationContext());
timer.scheduleAtFixedRate(findNearby,1000,AppDataHandler.TASK_TIME);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mGoogleApiClient.connect();
Log.d("Service","onstartcommand");
return Service.START_STICKY;
}
@Override
public void onConnected(Bundle arg0) {
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (location == null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
else{
onLocationChanged(location);
}
}
@Override
public void onLocationChanged(Location location) {
AppDataHandler.myLocation.setLatitude(String.valueOf(location.getLatitude())+"");
AppDataHandler.myLocation.setLongitude(String.valueOf(location.getLongitude())+"");
//store on shared pref
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("FriendFinderSharedPref", Context.MODE_PRIVATE);
LocationBean myLocation = new LocationBean();
myLocation.setLatitude(String.valueOf(location.getLatitude())+"");
myLocation.setLongitude(String.valueOf(location.getLongitude())+"");
myLocation.setMobile(sharedPreferences.getString("myMobile", "noData"));
//save to shared pref to make accessible from TimerTask
Gson gson = new Gson();
Editor editor = sharedPreferences.edit();
editor.putString("myLocation", gson.toJson(myLocation).toString());
editor.commit();
//store location on server by using volley String request
String url = baseURL+"userdata/savemylocation";
//inform to activity
sendBroadcast();
}
//send broadcast from activity to all receivers listening to the action "ACTION_STRING_ACTIVITY"
private void sendBroadcast() {
final Intent new_intent = new Intent();
new_intent.setAction(AppDataHandler.ACTIVITY_RECEIVER_ACTION);
sendBroadcast(new_intent);
}
@Override
public void onDestroy() {
Log.d("service", "destroy");
super.onDestroy();
}
@Override
public void onConnectionFailed(ConnectionResult arg0) {}
@Override
public void onConnectionSuspended(int arg0) {}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}