import { EventEmitter } from '@unimodules/core';
declare const LocationEventEmitter: EventEmitter;
export interface ProviderStatus {
    locationServicesEnabled: boolean;
    backgroundModeEnabled: boolean;
    gpsAvailable?: boolean;
    networkAvailable?: boolean;
    passiveAvailable?: boolean;
}
export interface LocationOptions {
    accuracy?: LocationAccuracy;
    enableHighAccuracy?: boolean;
    timeInterval?: number;
    distanceInterval?: number;
    timeout?: number;
    mayShowUserSettingsDialog?: boolean;
}
export interface LocationData {
    coords: {
        latitude: number;
        longitude: number;
        altitude: number;
        accuracy: number;
        heading: number;
        speed: number;
    };
    timestamp: number;
}
export interface HeadingData {
    trueHeading: number;
    magHeading: number;
    accuracy: number;
}
export interface GeocodedLocation {
    latitude: number;
    longitude: number;
    altitude?: number;
    accuracy?: number;
}
export interface Address {
    city: string;
    street: string;
    region: string;
    country: string;
    postalCode: string;
    name: string;
}
interface LocationTaskOptions {
    accuracy?: LocationAccuracy;
    timeInterval?: number;
    distanceInterval?: number;
    showsBackgroundLocationIndicator?: boolean;
    deferredUpdatesDistance?: number;
    deferredUpdatesTimeout?: number;
    deferredUpdatesInterval?: number;
    activityType?: LocationActivityType;
    pausesUpdatesAutomatically?: boolean;
    foregroundService?: {
        notificationTitle: string;
        notificationBody: string;
        notificationColor?: string;
    };
}
interface Region {
    identifier?: string;
    latitude: number;
    longitude: number;
    radius: number;
    notifyOnEnter?: boolean;
    notifyOnExit?: boolean;
}
declare type LocationCallback = (data: LocationData) => any;
declare type HeadingCallback = (data: HeadingData) => any;
declare enum LocationAccuracy {
    Lowest = 1,
    Low = 2,
    Balanced = 3,
    High = 4,
    Highest = 5,
    BestForNavigation = 6
}
declare enum LocationActivityType {
    Other = 1,
    AutomotiveNavigation = 2,
    Fitness = 3,
    OtherNavigation = 4,
    Airborne = 5
}
export { LocationAccuracy as Accuracy, LocationActivityType as ActivityType };
export declare enum GeofencingEventType {
    Enter = 1,
    Exit = 2
}
export declare enum GeofencingRegionState {
    Unknown = 0,
    Inside = 1,
    Outside = 2
}
declare function _getCurrentWatchId(): number;
export declare function getProviderStatusAsync(): Promise<ProviderStatus>;
export declare function enableNetworkProviderAsync(): Promise<void>;
export declare function getCurrentPositionAsync(options?: LocationOptions): Promise<LocationData>;
export declare function getHeadingAsync(): Promise<HeadingData>;
export declare function watchHeadingAsync(callback: HeadingCallback): Promise<{
    remove: () => void;
}>;
export declare function geocodeAsync(address: string): Promise<Array<GeocodedLocation>>;
export declare function reverseGeocodeAsync(location: {
    latitude: number;
    longitude: number;
}): Promise<Address[]>;
export declare function setApiKey(apiKey: string): void;
export declare function watchPositionAsync(options: LocationOptions, callback: LocationCallback): Promise<{
    remove(): void;
}>;
export declare function requestPermissionsAsync(): Promise<void>;
export declare function hasServicesEnabledAsync(): Promise<boolean>;
export declare function isBackgroundLocationAvailableAsync(): Promise<boolean>;
export declare function startLocationUpdatesAsync(taskName: string, options?: LocationTaskOptions): Promise<void>;
export declare function stopLocationUpdatesAsync(taskName: string): Promise<void>;
export declare function hasStartedLocationUpdatesAsync(taskName: string): Promise<boolean>;
export declare function startGeofencingAsync(taskName: string, regions?: Array<Region>): Promise<void>;
export declare function stopGeofencingAsync(taskName: string): Promise<void>;
export declare function hasStartedGeofencingAsync(taskName: string): Promise<boolean>;
export declare function installWebGeolocationPolyfill(): void;
export { LocationEventEmitter as EventEmitter, _getCurrentWatchId, };