All Downloads are FREE. Search and download functionalities are using the official Maven repository.

android.location.CountryDetector Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 14-robolectric-10818077
Show newest version
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package android.location;

import java.util.HashMap;

import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.util.Log;

/**
 * This class provides access to the system country detector service. This
 * service allows applications to obtain the country that the user is in.
 * 

* The country will be detected in order of reliability, like *

    *
  • Mobile network
  • *
  • Location
  • *
  • SIM's country
  • *
  • Phone's locale
  • *
*

* Call the {@link #detectCountry()} to get the available country immediately. *

* To be notified of the future country change, use the * {@link #addCountryListener} *

*

* You do not instantiate this class directly; instead, retrieve it through * {@link android.content.Context#getSystemService * Context.getSystemService(Context.COUNTRY_DETECTOR)}. *

* Both ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION permissions are needed. * * @hide */ public class CountryDetector { /** * The class to wrap the ICountryListener.Stub and CountryListener objects * together. The CountryListener will be notified through the specific * looper once the country changed and detected. */ private final static class ListenerTransport extends ICountryListener.Stub { private final CountryListener mListener; private final Handler mHandler; public ListenerTransport(CountryListener listener, Looper looper) { mListener = listener; if (looper != null) { mHandler = new Handler(looper); } else { mHandler = new Handler(); } } public void onCountryDetected(final Country country) { mHandler.post(new Runnable() { public void run() { mListener.onCountryDetected(country); } }); } } private final static String TAG = "CountryDetector"; private final ICountryDetector mService; private final HashMap mListeners; /** * @hide - hide this constructor because it has a parameter of type * ICountryDetector, which is a system private class. The right way to * create an instance of this class is using the factory * Context.getSystemService. */ public CountryDetector(ICountryDetector service) { mService = service; mListeners = new HashMap(); } /** * Start detecting the country that the user is in. * * @return the country if it is available immediately, otherwise null will * be returned. */ public Country detectCountry() { try { return mService.detectCountry(); } catch (RemoteException e) { Log.e(TAG, "detectCountry: RemoteException", e); return null; } } /** * Add a listener to receive the notification when the country is detected * or changed. * * @param listener will be called when the country is detected or changed. * @param looper a Looper object whose message queue will be used to * implement the callback mechanism. If looper is null then the * callbacks will be called on the main thread. */ public void addCountryListener(CountryListener listener, Looper looper) { synchronized (mListeners) { if (!mListeners.containsKey(listener)) { ListenerTransport transport = new ListenerTransport(listener, looper); try { mService.addCountryListener(transport); mListeners.put(listener, transport); } catch (RemoteException e) { Log.e(TAG, "addCountryListener: RemoteException", e); } } } } /** * Remove the listener */ public void removeCountryListener(CountryListener listener) { synchronized (mListeners) { ListenerTransport transport = mListeners.get(listener); if (transport != null) { try { mListeners.remove(listener); mService.removeCountryListener(transport); } catch (RemoteException e) { Log.e(TAG, "removeCountryListener: RemoteException", e); } } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy