use of com.android.server.location.PassiveProvider in project android_frameworks_base by crdroidandroid.
the class LocationManagerService method loadProvidersLocked.
private void loadProvidersLocked() {
// create a passive location provider, which is always enabled
PassiveProvider passiveProvider = new PassiveProvider(this);
addProviderLocked(passiveProvider);
mEnabledProviders.add(passiveProvider.getName());
mPassiveProvider = passiveProvider;
if (GnssLocationProvider.isSupported()) {
// Create a gps location provider
GnssLocationProvider gnssProvider = new GnssLocationProvider(mContext, this, mLocationHandler.getLooper());
mGnssSystemInfoProvider = gnssProvider.getGnssSystemInfoProvider();
mGnssStatusProvider = gnssProvider.getGnssStatusProvider();
mNetInitiatedListener = gnssProvider.getNetInitiatedListener();
addProviderLocked(gnssProvider);
mRealProviders.put(LocationManager.GPS_PROVIDER, gnssProvider);
mGnssMeasurementsProvider = gnssProvider.getGnssMeasurementsProvider();
mGnssNavigationMessageProvider = gnssProvider.getGnssNavigationMessageProvider();
mGpsGeofenceProxy = gnssProvider.getGpsGeofenceProxy();
}
/*
Load package name(s) containing location provider support.
These packages can contain services implementing location providers:
Geocoder Provider, Network Location Provider, and
Fused Location Provider. They will each be searched for
service components implementing these providers.
The location framework also has support for installation
of new location providers at run-time. The new package does not
have to be explicitly listed here, however it must have a signature
that matches the signature of at least one package on this list.
*/
Resources resources = mContext.getResources();
ArrayList<String> providerPackageNames = new ArrayList<String>();
String[] pkgs = resources.getStringArray(com.android.internal.R.array.config_locationProviderPackageNames);
if (D)
Log.d(TAG, "certificates for location providers pulled from: " + Arrays.toString(pkgs));
if (pkgs != null)
providerPackageNames.addAll(Arrays.asList(pkgs));
ensureFallbackFusedProviderPresentLocked(providerPackageNames);
// bind to network provider
LocationProviderProxy networkProvider = LocationProviderProxy.createAndBind(mContext, LocationManager.NETWORK_PROVIDER, NETWORK_LOCATION_SERVICE_ACTION, com.android.internal.R.bool.config_enableNetworkLocationOverlay, com.android.internal.R.string.config_networkLocationProviderPackageName, com.android.internal.R.array.config_locationProviderPackageNames, mLocationHandler);
if (networkProvider != null) {
mRealProviders.put(LocationManager.NETWORK_PROVIDER, networkProvider);
mProxyProviders.add(networkProvider);
addProviderLocked(networkProvider);
} else {
Slog.w(TAG, "no network location provider found");
}
// bind to fused provider
LocationProviderProxy fusedLocationProvider = LocationProviderProxy.createAndBind(mContext, LocationManager.FUSED_PROVIDER, FUSED_LOCATION_SERVICE_ACTION, com.android.internal.R.bool.config_enableFusedLocationOverlay, com.android.internal.R.string.config_fusedLocationProviderPackageName, com.android.internal.R.array.config_locationProviderPackageNames, mLocationHandler);
if (fusedLocationProvider != null) {
addProviderLocked(fusedLocationProvider);
mProxyProviders.add(fusedLocationProvider);
mEnabledProviders.add(fusedLocationProvider.getName());
mRealProviders.put(LocationManager.FUSED_PROVIDER, fusedLocationProvider);
} else {
Slog.e(TAG, "no fused location provider found", new IllegalStateException("Location service needs a fused location provider"));
}
// bind to geocoder provider
mGeocodeProvider = GeocoderProxy.createAndBind(mContext, com.android.internal.R.bool.config_enableGeocoderOverlay, com.android.internal.R.string.config_geocoderProviderPackageName, com.android.internal.R.array.config_locationProviderPackageNames, mLocationHandler);
if (mGeocodeProvider == null) {
Slog.e(TAG, "no geocoder provider found");
}
// bind to fused hardware provider if supported
// in devices without support, requesting an instance of FlpHardwareProvider will raise an
// exception, so make sure we only do that when supported
FlpHardwareProvider flpHardwareProvider;
if (FlpHardwareProvider.isSupported()) {
flpHardwareProvider = FlpHardwareProvider.getInstance(mContext);
FusedProxy fusedProxy = FusedProxy.createAndBind(mContext, mLocationHandler, flpHardwareProvider.getLocationHardware(), com.android.internal.R.bool.config_enableHardwareFlpOverlay, com.android.internal.R.string.config_hardwareFlpPackageName, com.android.internal.R.array.config_locationProviderPackageNames);
if (fusedProxy == null) {
Slog.d(TAG, "Unable to bind FusedProxy.");
}
} else {
flpHardwareProvider = null;
Slog.d(TAG, "FLP HAL not supported");
}
// bind to geofence provider
GeofenceProxy provider = GeofenceProxy.createAndBind(mContext, com.android.internal.R.bool.config_enableGeofenceOverlay, com.android.internal.R.string.config_geofenceProviderPackageName, com.android.internal.R.array.config_locationProviderPackageNames, mLocationHandler, mGpsGeofenceProxy, flpHardwareProvider != null ? flpHardwareProvider.getGeofenceHardware() : null);
if (provider == null) {
Slog.d(TAG, "Unable to bind FLP Geofence proxy.");
}
// bind to hardware activity recognition
boolean activityRecognitionHardwareIsSupported = ActivityRecognitionHardware.isSupported();
ActivityRecognitionHardware activityRecognitionHardware = null;
if (activityRecognitionHardwareIsSupported) {
activityRecognitionHardware = ActivityRecognitionHardware.getInstance(mContext);
} else {
Slog.d(TAG, "Hardware Activity-Recognition not supported.");
}
ActivityRecognitionProxy proxy = ActivityRecognitionProxy.createAndBind(mContext, mLocationHandler, activityRecognitionHardwareIsSupported, activityRecognitionHardware, com.android.internal.R.bool.config_enableActivityRecognitionHardwareOverlay, com.android.internal.R.string.config_activityRecognitionHardwarePackageName, com.android.internal.R.array.config_locationProviderPackageNames);
if (proxy == null) {
Slog.d(TAG, "Unable to bind ActivityRecognitionProxy.");
}
mComboNlpPackageName = resources.getString(com.android.internal.R.string.config_comboNetworkLocationProvider);
if (mComboNlpPackageName != null) {
mComboNlpReadyMarker = mComboNlpPackageName + ".nlp:ready";
mComboNlpScreenMarker = mComboNlpPackageName + ".nlp:screen";
}
String[] testProviderStrings = resources.getStringArray(com.android.internal.R.array.config_testLocationProviders);
for (String testProviderString : testProviderStrings) {
String[] fragments = testProviderString.split(",");
String name = fragments[0].trim();
if (mProvidersByName.get(name) != null) {
throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
}
ProviderProperties properties = new ProviderProperties(Boolean.parseBoolean(fragments[1]), /* requiresNetwork */
Boolean.parseBoolean(fragments[2]), /* requiresSatellite */
Boolean.parseBoolean(fragments[3]), /* requiresCell */
Boolean.parseBoolean(fragments[4]), /* hasMonetaryCost */
Boolean.parseBoolean(fragments[5]), /* supportsAltitude */
Boolean.parseBoolean(fragments[6]), /* supportsSpeed */
Boolean.parseBoolean(fragments[7]), /* supportsBearing */
Integer.parseInt(fragments[8]), /* powerRequirement */
Integer.parseInt(fragments[9]));
addTestProviderLocked(name, properties);
}
}
Aggregations