android4.04 gps架构

来源:互联网 发布:话费充值平台源码 编辑:程序博客网 时间:2024/06/05 19:57
在SystemService.java下的init2线程里面启动位置服务:
LocationManagerService location = null;
location = new LocationManagerService(context);
ServiceManager.addService(Context.LOCATION_SERVICE, location);

LocationManagerService位于LocationManagerService.java
public class LocationManagerService extends ILocationManager.Stub implements Runnable {
}

在com_android_server_location_GpsLocationProvider.cpp中
int register_android_server_location_GpsLocationProvider(JNIEnv* env)
{
    return jniRegisterNativeMethods(env, "com/android/server/location/GpsLocationProvider", sMethods, NELEM(sMethods));
}
可以看到GpsLocationProvider类是jni方法的直接调用者,位于GpsLocationProvider.java



测试程序:
public class MainActivity extends Activity { @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                          Button button=(Button)findViewById(R.id.button1);         button.setOnClickListener(new Button.OnClickListener() {                          @Override             public void onClick(View arg0) {                 // TODO Auto-generated method stub                 String serviceString=Context.LOCATION_SERVICE;                 LocationManager locationManager=(LocationManager)getSystemService(serviceString);                 String provider=LocationManager.GPS_PROVIDER;                 Location location=locationManager.getLastKnownLocation(provider);                 getLocationInfo(location);                 locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);             }         });              }     private void getLocationInfo(Location location) {         String latLongInfo;         TextView lo=(TextView)findViewById(R.id.textView1);         if(location!=null){             double lat=location.getLatitude();             double lng=location.getLongitude();             latLongInfo="Lat:"+lat+"\nLong:"+lng;             lo.setText(latLongInfo);         }else {             latLongInfo="No location found";             lo.setText(latLongInfo);         }            }     private final LocationListener locationListener =new LocationListener() {                @Override         public void onStatusChanged(String provider, int status, Bundle extras) {             // TODO Auto-generated method stub                      }                @Override         public void onProviderEnabled(String provider) {             getLocationInfo(null);                      }                @Override         public void onProviderDisabled(String provider) {             getLocationInfo(null);                   }                @Override         public void onLocationChanged(Location location) {             getLocationInfo(location);             Toast.makeText(MainActivity.this, "位置改变了::::::::::::", 3000).show();         }     };             }

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><uses-permission android:name="android.permission.ACCESSFINELOCATION"/><uses-permission android:name="android.permission.ACCESSCOARSELOCATION"/>


解析1:LocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);

getSystemService位于contextimpl.java
    
    public Object getSystemService(String name) {
        ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);
        return fetcher == null ? null : fetcher.getService(this);
    }
即从SYSTEM_SERVICE_MAP中获取fetcher

ServiceFetcher类是一个辅助类,用于获取系统中的service, 这个类比较简单,只定义了getService和createService方法。每个java层的service, 如wifiservice,
activitymanagerservice等都会建立一个ServiceFetcher类的对象,这个对象会重载createService方法,并且这个对象会通过contextImpl类中的registerService
方法添加到SYSTEM_SERVICE_MAP(详见下文)这个hashmap变量中。

SYSTEM_SERVICE_MAP中的fetcher是什么时候创建的呢?通过静态块

static{        registerService(ACCESSIBILITY_SERVICE, new ServiceFetcher() {                public Object getService(ContextImpl ctx) {                    return AccessibilityManager.getInstance(ctx);                }});        registerService(ACCOUNT_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    IBinder b = ServiceManager.getService(ACCOUNT_SERVICE);                    IAccountManager service = IAccountManager.Stub.asInterface(b);                    return new AccountManager(ctx, service);                }});        registerService(ACTIVITY_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new ActivityManager(ctx.getOuterContext(), ctx.mMainThread.getHandler());                }});        registerService(ALARM_SERVICE, new StaticServiceFetcher() {                public Object createStaticService() {                    IBinder b = ServiceManager.getService(ALARM_SERVICE);                    IAlarmManager service = IAlarmManager.Stub.asInterface(b);                    return new AlarmManager(service);                }});        registerService(AUDIO_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new AudioManager(ctx);                }});        registerService(CLIPBOARD_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new ClipboardManager(ctx.getOuterContext(),                            ctx.mMainThread.getHandler());                }});        registerService(CONNECTIVITY_SERVICE, new StaticServiceFetcher() {                public Object createStaticService() {                    IBinder b = ServiceManager.getService(CONNECTIVITY_SERVICE);                    return new ConnectivityManager(IConnectivityManager.Stub.asInterface(b));                }});        registerService(COUNTRY_DETECTOR, new StaticServiceFetcher() {                public Object createStaticService() {                    IBinder b = ServiceManager.getService(COUNTRY_DETECTOR);                    return new CountryDetector(ICountryDetector.Stub.asInterface(b));                }});        registerService(DEVICE_POLICY_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return DevicePolicyManager.create(ctx, ctx.mMainThread.getHandler());                }});        registerService(DOWNLOAD_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new DownloadManager(ctx.getContentResolver(), ctx.getPackageName());                }});        registerService(NFC_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new NfcManager(ctx);                }});        registerService(DROPBOX_SERVICE, new StaticServiceFetcher() {                public Object createStaticService() {                    return createDropBoxManager();                }});        registerService(INPUT_METHOD_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return InputMethodManager.getInstance(ctx);                }});        registerService(TEXT_SERVICES_MANAGER_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return TextServicesManager.getInstance();                }});        registerService(KEYGUARD_SERVICE, new ServiceFetcher() {                public Object getService(ContextImpl ctx) {                    // TODO: why isn't this caching it?  It wasn't                    // before, so I'm preserving the old behavior and                    // using getService(), instead of createService()                    // which would do the caching.                    return new KeyguardManager();                }});        registerService(LAYOUT_INFLATER_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return PolicyManager.makeNewLayoutInflater(ctx.getOuterContext());                }});        registerService(LOCATION_SERVICE, new StaticServiceFetcher() {                public Object createStaticService() {                    IBinder b = ServiceManager.getService(LOCATION_SERVICE);                    return new LocationManager(ILocationManager.Stub.asInterface(b));                }});        registerService(NETWORK_POLICY_SERVICE, new ServiceFetcher() {            @Override            public Object createService(ContextImpl ctx) {                return new NetworkPolicyManager(INetworkPolicyManager.Stub.asInterface(                        ServiceManager.getService(NETWORK_POLICY_SERVICE)));            }        });        registerService(NOTIFICATION_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    final Context outerContext = ctx.getOuterContext();                    return new NotificationManager(                        new ContextThemeWrapper(outerContext,                                Resources.selectSystemTheme(0,                                        outerContext.getApplicationInfo().targetSdkVersion,                                        com.android.internal.R.style.Theme_Dialog,                                        com.android.internal.R.style.Theme_Holo_Dialog,                                        com.android.internal.R.style.Theme_DeviceDefault_Dialog)),                        ctx.mMainThread.getHandler());                }});        // Note: this was previously cached in a static variable, but        // constructed using mMainThread.getHandler(), so converting        // it to be a regular Context-cached service...        registerService(POWER_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    IBinder b = ServiceManager.getService(POWER_SERVICE);                    IPowerManager service = IPowerManager.Stub.asInterface(b);                    return new PowerManager(service, ctx.mMainThread.getHandler());                }});        registerService(SEARCH_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new SearchManager(ctx.getOuterContext(),                            ctx.mMainThread.getHandler());                }});        registerService(SENSOR_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new SensorManager(ctx.mMainThread.getHandler().getLooper());                }});        registerService(STATUS_BAR_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new StatusBarManager(ctx.getOuterContext());                }});        registerService(STORAGE_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    try {                        return new StorageManager(ctx.mMainThread.getHandler().getLooper());                    } catch (RemoteException rex) {                        Log.e(TAG, "Failed to create StorageManager", rex);                        return null;                    }                }});        registerService(TELEPHONY_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new TelephonyManager(ctx.getOuterContext());                }});        registerService(THROTTLE_SERVICE, new StaticServiceFetcher() {                public Object createStaticService() {                    IBinder b = ServiceManager.getService(THROTTLE_SERVICE);                    return new ThrottleManager(IThrottleManager.Stub.asInterface(b));                }});        registerService(UI_MODE_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new UiModeManager();                }});        registerService(USB_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    IBinder b = ServiceManager.getService(USB_SERVICE);                    return new UsbManager(ctx, IUsbManager.Stub.asInterface(b));                }});        registerService(VIBRATOR_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    return new Vibrator();                }});        registerService(WALLPAPER_SERVICE, WALLPAPER_FETCHER);        registerService(WIFI_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    IBinder b = ServiceManager.getService(WIFI_SERVICE);                    IWifiManager service = IWifiManager.Stub.asInterface(b);                    return new WifiManager(service, ctx.mMainThread.getHandler());                }});        registerService(WIFI_P2P_SERVICE, new ServiceFetcher() {                public Object createService(ContextImpl ctx) {                    IBinder b = ServiceManager.getService(WIFI_P2P_SERVICE);                    IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b);                    return new WifiP2pManager(service);                }});        registerService(WINDOW_SERVICE, new ServiceFetcher() {                public Object getService(ContextImpl ctx) {                    return WindowManagerImpl.getDefault(ctx.mPackageInfo.mCompatibilityInfo);                }});    }

所以,getSystemService(Context.LOCATION_SERVICE)的作用除了注册进map,
就相当于
                    IBinder b = ServiceManager.getService(LOCATION_SERVICE);
                    return new LocationManager(ILocationManager.Stub.asInterface(b));

如果某些些服务没有添加进SYSTEM_SERVICE_MAP,那么getSystemService去获取时就会返回null.而此时可以直接用如下代码获取对应服务,比如
fregService = IFregService.Stub.asInterface( ServiceManager.getService("freg"));


解析2 ServiceManager.getService(LOCATION_SERVICE);

位于ServiceManager.java,通过名字获取服务,返回一个IBinder接口
那么什么时候将服务添加进来的呢?
在init进程的init2时,位于SystemServer,java
                LocationManagerService location = new LocationManagerService(context);
                ServiceManager.addService(Context.LOCATION_SERVICE, location);
此时将location 服务添加进系统,并调用该类LocationManagerService的systemReady
               locationF.systemReady();
此函数创建线程,并执行;线程的作用是进入消息循环
    public void run()    {        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);        Looper.prepare();        mLocationHandler = new LocationWorkerHandler();        initialize();        Looper.loop();    }


解析3 ILocationManager.Stub.asInterface
ILocationManager是一个接口,Stub是这个接口的内部类,asInterface是Stub类的成员函数用于返回ILocationManager

解析4 return new LocationManager(ILocationManager.Stub.asInterface(b));
通过LocationManager的构造函数
    public LocationManager(ILocationManager service) {
        mService = service;
    }
传递进来的是一个ILocationManager 

解析5 Location location=locationManager.getLastKnownLocation(provider);
获取最近一次定位的信息
    public Location getLastKnownLocation(String provider) {
            return mService.getLastKnownLocation(provider);
    }
首先调用到ILocationManager.java中的proxy类的成员getLastKnownLocation
public android.location.Location getLastKnownLocation(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();android.location.Location _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_getLastKnownLocation, _data, _reply, 0);_reply.readException();if ((0!=_reply.readInt())) {_result = android.location.Location.CREATOR.createFromParcel(_reply);}else {_result = null;}}finally {_reply.recycle();_data.recycle();}return _result;}
然后跨进程调用到Stub的成员
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException{case TRANSACTION_getLastKnownLocation:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Location _result = this.getLastKnownLocation(_arg0);reply.writeNoException();if ((_result!=null)) {reply.writeInt(1);_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);}else {reply.writeInt(0);}return true;}}

通过this调用到LocationManagerService的getLastKnownLocation
    public Location getLastKnownLocation(String provider) {
           return _getLastKnownLocationLocked(provider);
    }
    private Location _getLastKnownLocationLocked(String provider) {
        return mLastKnownLocation.get(provider);
    }
mLastKnownLocation定义为HashMap<String,Location> mLastKnownLocation
在每次位置变化时,会执行  mLastKnownLocation.put(provider, new Location(location));


解析6 locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);
成员函数requestLocationUpdates位于locationManager.java
    public void requestLocationUpdates(String provider,long minTime, float minDistance, LocationListener listener) {
        _requestLocationUpdates(provider, null, minTime, minDistance, false, listener, null);
    }

    private void _requestLocationUpdates(String provider, Criteria criteria, long minTime, float minDistance, boolean singleShot, LocationListener listener, Looper looper) {
                ListenerTransport transport = mListeners.get(listener);
                if (transport == null) {
                    transport = new ListenerTransport(listener, looper);
                }
                mListeners.put(listener, transport);
                mService.requestLocationUpdates(provider, criteria, minTime, minDistance, singleShot, transport);
    }



解析7
locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);

    private void _requestLocationUpdates(String provider, Criteria criteria, long minTime,
            float minDistance, boolean singleShot, LocationListener listener, Looper looper) {
                ListenerTransport transport = mListeners.get(listener);
                if (transport == null) {
                    transport = new ListenerTransport(listener, looper);
                }
                mListeners.put(listener, transport);
                mService.requestLocationUpdates(provider, criteria, minTime, minDistance, singleShot, transport);
    }
 








Original file: frameworks/base/location/java/android/location/ILocationManager.aidl
ILocationManager.java
/* * This file is auto-generated.  DO NOT MODIFY. * Original file: frameworks/base/location/java/android/location/ILocationManager.aidl */package android.location;/** * System private API for talking with the location service. * * {@hide} */public interface ILocationManager extends android.os.IInterface{/** Local-side IPC implementation stub class. */public static abstract class Stub extends android.os.Binder implements android.location.ILocationManager{private static final java.lang.String DESCRIPTOR = "android.location.ILocationManager";/** Construct the stub at attach it to the interface. */public Stub(){this.attachInterface(this, DESCRIPTOR);}/** * Cast an IBinder object into an android.location.ILocationManager interface, * generating a proxy if needed. */public static android.location.ILocationManager asInterface(android.os.IBinder obj){if ((obj==null)) {return null;}android.os.IInterface iin = (android.os.IInterface)obj.queryLocalInterface(DESCRIPTOR);if (((iin!=null)&&(iin instanceof android.location.ILocationManager))) {return ((android.location.ILocationManager)iin);}return new android.location.ILocationManager.Stub.Proxy(obj);}public android.os.IBinder asBinder(){return this;}@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException{switch (code){case INTERFACE_TRANSACTION:{reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_getAllProviders:{data.enforceInterface(DESCRIPTOR);java.util.List<java.lang.String> _result = this.getAllProviders();reply.writeNoException();reply.writeStringList(_result);return true;}case TRANSACTION_getProviders:{data.enforceInterface(DESCRIPTOR);android.location.Criteria _arg0;if ((0!=data.readInt())) {_arg0 = android.location.Criteria.CREATOR.createFromParcel(data);}else {_arg0 = null;}boolean _arg1;_arg1 = (0!=data.readInt());java.util.List<java.lang.String> _result = this.getProviders(_arg0, _arg1);reply.writeNoException();reply.writeStringList(_result);return true;}case TRANSACTION_getBestProvider:{data.enforceInterface(DESCRIPTOR);android.location.Criteria _arg0;if ((0!=data.readInt())) {_arg0 = android.location.Criteria.CREATOR.createFromParcel(data);}else {_arg0 = null;}boolean _arg1;_arg1 = (0!=data.readInt());java.lang.String _result = this.getBestProvider(_arg0, _arg1);reply.writeNoException();reply.writeString(_result);return true;}case TRANSACTION_providerMeetsCriteria:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Criteria _arg1;if ((0!=data.readInt())) {_arg1 = android.location.Criteria.CREATOR.createFromParcel(data);}else {_arg1 = null;}boolean _result = this.providerMeetsCriteria(_arg0, _arg1);reply.writeNoException();reply.writeInt(((_result)?(1):(0)));return true;}case TRANSACTION_requestLocationUpdates:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Criteria _arg1;if ((0!=data.readInt())) {_arg1 = android.location.Criteria.CREATOR.createFromParcel(data);}else {_arg1 = null;}long _arg2;_arg2 = data.readLong();float _arg3;_arg3 = data.readFloat();boolean _arg4;_arg4 = (0!=data.readInt());android.location.ILocationListener _arg5;_arg5 = android.location.ILocationListener.Stub.asInterface(data.readStrongBinder());this.requestLocationUpdates(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5);reply.writeNoException();return true;}case TRANSACTION_requestLocationUpdatesPI:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Criteria _arg1;if ((0!=data.readInt())) {_arg1 = android.location.Criteria.CREATOR.createFromParcel(data);}else {_arg1 = null;}long _arg2;_arg2 = data.readLong();float _arg3;_arg3 = data.readFloat();boolean _arg4;_arg4 = (0!=data.readInt());android.app.PendingIntent _arg5;if ((0!=data.readInt())) {_arg5 = android.app.PendingIntent.CREATOR.createFromParcel(data);}else {_arg5 = null;}this.requestLocationUpdatesPI(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5);reply.writeNoException();return true;}case TRANSACTION_removeUpdates:{data.enforceInterface(DESCRIPTOR);android.location.ILocationListener _arg0;_arg0 = android.location.ILocationListener.Stub.asInterface(data.readStrongBinder());this.removeUpdates(_arg0);reply.writeNoException();return true;}case TRANSACTION_removeUpdatesPI:{data.enforceInterface(DESCRIPTOR);android.app.PendingIntent _arg0;if ((0!=data.readInt())) {_arg0 = android.app.PendingIntent.CREATOR.createFromParcel(data);}else {_arg0 = null;}this.removeUpdatesPI(_arg0);reply.writeNoException();return true;}case TRANSACTION_addGpsStatusListener:{data.enforceInterface(DESCRIPTOR);android.location.IGpsStatusListener _arg0;_arg0 = android.location.IGpsStatusListener.Stub.asInterface(data.readStrongBinder());boolean _result = this.addGpsStatusListener(_arg0);reply.writeNoException();reply.writeInt(((_result)?(1):(0)));return true;}case TRANSACTION_removeGpsStatusListener:{data.enforceInterface(DESCRIPTOR);android.location.IGpsStatusListener _arg0;_arg0 = android.location.IGpsStatusListener.Stub.asInterface(data.readStrongBinder());this.removeGpsStatusListener(_arg0);reply.writeNoException();return true;}case TRANSACTION_locationCallbackFinished:{data.enforceInterface(DESCRIPTOR);android.location.ILocationListener _arg0;_arg0 = android.location.ILocationListener.Stub.asInterface(data.readStrongBinder());this.locationCallbackFinished(_arg0);reply.writeNoException();return true;}case TRANSACTION_sendExtraCommand:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();java.lang.String _arg1;_arg1 = data.readString();android.os.Bundle _arg2;if ((0!=data.readInt())) {_arg2 = android.os.Bundle.CREATOR.createFromParcel(data);}else {_arg2 = null;}boolean _result = this.sendExtraCommand(_arg0, _arg1, _arg2);reply.writeNoException();reply.writeInt(((_result)?(1):(0)));if ((_arg2!=null)) {reply.writeInt(1);_arg2.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);}else {reply.writeInt(0);}return true;}case TRANSACTION_addProximityAlert:{data.enforceInterface(DESCRIPTOR);double _arg0;_arg0 = data.readDouble();double _arg1;_arg1 = data.readDouble();float _arg2;_arg2 = data.readFloat();long _arg3;_arg3 = data.readLong();android.app.PendingIntent _arg4;if ((0!=data.readInt())) {_arg4 = android.app.PendingIntent.CREATOR.createFromParcel(data);}else {_arg4 = null;}this.addProximityAlert(_arg0, _arg1, _arg2, _arg3, _arg4);reply.writeNoException();return true;}case TRANSACTION_removeProximityAlert:{data.enforceInterface(DESCRIPTOR);android.app.PendingIntent _arg0;if ((0!=data.readInt())) {_arg0 = android.app.PendingIntent.CREATOR.createFromParcel(data);}else {_arg0 = null;}this.removeProximityAlert(_arg0);reply.writeNoException();return true;}case TRANSACTION_getProviderInfo:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.os.Bundle _result = this.getProviderInfo(_arg0);reply.writeNoException();if ((_result!=null)) {reply.writeInt(1);_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);}else {reply.writeInt(0);}return true;}case TRANSACTION_isProviderEnabled:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();boolean _result = this.isProviderEnabled(_arg0);reply.writeNoException();reply.writeInt(((_result)?(1):(0)));return true;}case TRANSACTION_getLastKnownLocation:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Location _result = this.getLastKnownLocation(_arg0);reply.writeNoException();if ((_result!=null)) {reply.writeInt(1);_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);}else {reply.writeInt(0);}return true;}case TRANSACTION_reportLocation:{data.enforceInterface(DESCRIPTOR);android.location.Location _arg0;if ((0!=data.readInt())) {_arg0 = android.location.Location.CREATOR.createFromParcel(data);}else {_arg0 = null;}boolean _arg1;_arg1 = (0!=data.readInt());this.reportLocation(_arg0, _arg1);reply.writeNoException();return true;}case TRANSACTION_geocoderIsPresent:{data.enforceInterface(DESCRIPTOR);boolean _result = this.geocoderIsPresent();reply.writeNoException();reply.writeInt(((_result)?(1):(0)));return true;}case TRANSACTION_getFromLocation:{data.enforceInterface(DESCRIPTOR);double _arg0;_arg0 = data.readDouble();double _arg1;_arg1 = data.readDouble();int _arg2;_arg2 = data.readInt();android.location.GeocoderParams _arg3;if ((0!=data.readInt())) {_arg3 = android.location.GeocoderParams.CREATOR.createFromParcel(data);}else {_arg3 = null;}java.util.List<android.location.Address> _arg4;_arg4 = new java.util.ArrayList<android.location.Address>();java.lang.String _result = this.getFromLocation(_arg0, _arg1, _arg2, _arg3, _arg4);reply.writeNoException();reply.writeString(_result);reply.writeTypedList(_arg4);return true;}case TRANSACTION_getFromLocationName:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();double _arg1;_arg1 = data.readDouble();double _arg2;_arg2 = data.readDouble();double _arg3;_arg3 = data.readDouble();double _arg4;_arg4 = data.readDouble();int _arg5;_arg5 = data.readInt();android.location.GeocoderParams _arg6;if ((0!=data.readInt())) {_arg6 = android.location.GeocoderParams.CREATOR.createFromParcel(data);}else {_arg6 = null;}java.util.List<android.location.Address> _arg7;_arg7 = new java.util.ArrayList<android.location.Address>();java.lang.String _result = this.getFromLocationName(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7);reply.writeNoException();reply.writeString(_result);reply.writeTypedList(_arg7);return true;}case TRANSACTION_addTestProvider:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();boolean _arg1;_arg1 = (0!=data.readInt());boolean _arg2;_arg2 = (0!=data.readInt());boolean _arg3;_arg3 = (0!=data.readInt());boolean _arg4;_arg4 = (0!=data.readInt());boolean _arg5;_arg5 = (0!=data.readInt());boolean _arg6;_arg6 = (0!=data.readInt());boolean _arg7;_arg7 = (0!=data.readInt());int _arg8;_arg8 = data.readInt();int _arg9;_arg9 = data.readInt();this.addTestProvider(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9);reply.writeNoException();return true;}case TRANSACTION_removeTestProvider:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();this.removeTestProvider(_arg0);reply.writeNoException();return true;}case TRANSACTION_setTestProviderLocation:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();android.location.Location _arg1;if ((0!=data.readInt())) {_arg1 = android.location.Location.CREATOR.createFromParcel(data);}else {_arg1 = null;}this.setTestProviderLocation(_arg0, _arg1);reply.writeNoException();return true;}case TRANSACTION_clearTestProviderLocation:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();this.clearTestProviderLocation(_arg0);reply.writeNoException();return true;}case TRANSACTION_setTestProviderEnabled:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();boolean _arg1;_arg1 = (0!=data.readInt());this.setTestProviderEnabled(_arg0, _arg1);reply.writeNoException();return true;}case TRANSACTION_clearTestProviderEnabled:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();this.clearTestProviderEnabled(_arg0);reply.writeNoException();return true;}case TRANSACTION_setTestProviderStatus:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();int _arg1;_arg1 = data.readInt();android.os.Bundle _arg2;if ((0!=data.readInt())) {_arg2 = android.os.Bundle.CREATOR.createFromParcel(data);}else {_arg2 = null;}long _arg3;_arg3 = data.readLong();this.setTestProviderStatus(_arg0, _arg1, _arg2, _arg3);reply.writeNoException();return true;}case TRANSACTION_clearTestProviderStatus:{data.enforceInterface(DESCRIPTOR);java.lang.String _arg0;_arg0 = data.readString();this.clearTestProviderStatus(_arg0);reply.writeNoException();return true;}case TRANSACTION_sendNiResponse:{data.enforceInterface(DESCRIPTOR);int _arg0;_arg0 = data.readInt();int _arg1;_arg1 = data.readInt();boolean _result = this.sendNiResponse(_arg0, _arg1);reply.writeNoException();reply.writeInt(((_result)?(1):(0)));return true;}}return super.onTransact(code, data, reply, flags);}private static class Proxy implements android.location.ILocationManager{private android.os.IBinder mRemote;Proxy(android.os.IBinder remote){mRemote = remote;}public android.os.IBinder asBinder(){return mRemote;}public java.lang.String getInterfaceDescriptor(){return DESCRIPTOR;}public java.util.List<java.lang.String> getAllProviders() throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.util.List<java.lang.String> _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_getAllProviders, _data, _reply, 0);_reply.readException();_result = _reply.createStringArrayList();}finally {_reply.recycle();_data.recycle();}return _result;}public java.util.List<java.lang.String> getProviders(android.location.Criteria criteria, boolean enabledOnly) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.util.List<java.lang.String> _result;try {_data.writeInterfaceToken(DESCRIPTOR);if ((criteria!=null)) {_data.writeInt(1);criteria.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeInt(((enabledOnly)?(1):(0)));mRemote.transact(Stub.TRANSACTION_getProviders, _data, _reply, 0);_reply.readException();_result = _reply.createStringArrayList();}finally {_reply.recycle();_data.recycle();}return _result;}public java.lang.String getBestProvider(android.location.Criteria criteria, boolean enabledOnly) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.lang.String _result;try {_data.writeInterfaceToken(DESCRIPTOR);if ((criteria!=null)) {_data.writeInt(1);criteria.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeInt(((enabledOnly)?(1):(0)));mRemote.transact(Stub.TRANSACTION_getBestProvider, _data, _reply, 0);_reply.readException();_result = _reply.readString();}finally {_reply.recycle();_data.recycle();}return _result;}public boolean providerMeetsCriteria(java.lang.String provider, android.location.Criteria criteria) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);if ((criteria!=null)) {_data.writeInt(1);criteria.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_providerMeetsCriteria, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());}finally {_reply.recycle();_data.recycle();}return _result;}public void requestLocationUpdates(java.lang.String provider, android.location.Criteria criteria, long minTime, float minDistance, boolean singleShot, android.location.ILocationListener listener) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);if ((criteria!=null)) {_data.writeInt(1);criteria.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeLong(minTime);_data.writeFloat(minDistance);_data.writeInt(((singleShot)?(1):(0)));_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));mRemote.transact(Stub.TRANSACTION_requestLocationUpdates, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void requestLocationUpdatesPI(java.lang.String provider, android.location.Criteria criteria, long minTime, float minDistance, boolean singleShot, android.app.PendingIntent intent) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);if ((criteria!=null)) {_data.writeInt(1);criteria.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeLong(minTime);_data.writeFloat(minDistance);_data.writeInt(((singleShot)?(1):(0)));if ((intent!=null)) {_data.writeInt(1);intent.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_requestLocationUpdatesPI, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void removeUpdates(android.location.ILocationListener listener) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));mRemote.transact(Stub.TRANSACTION_removeUpdates, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void removeUpdatesPI(android.app.PendingIntent intent) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);if ((intent!=null)) {_data.writeInt(1);intent.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_removeUpdatesPI, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public boolean addGpsStatusListener(android.location.IGpsStatusListener listener) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));mRemote.transact(Stub.TRANSACTION_addGpsStatusListener, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());}finally {_reply.recycle();_data.recycle();}return _result;}public void removeGpsStatusListener(android.location.IGpsStatusListener listener) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));mRemote.transact(Stub.TRANSACTION_removeGpsStatusListener, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}// for reporting callback completionpublic void locationCallbackFinished(android.location.ILocationListener listener) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));mRemote.transact(Stub.TRANSACTION_locationCallbackFinished, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public boolean sendExtraCommand(java.lang.String provider, java.lang.String command, android.os.Bundle extras) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);_data.writeString(command);if ((extras!=null)) {_data.writeInt(1);extras.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_sendExtraCommand, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());if ((0!=_reply.readInt())) {extras.readFromParcel(_reply);}}finally {_reply.recycle();_data.recycle();}return _result;}public void addProximityAlert(double latitude, double longitude, float distance, long expiration, android.app.PendingIntent intent) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeDouble(latitude);_data.writeDouble(longitude);_data.writeFloat(distance);_data.writeLong(expiration);if ((intent!=null)) {_data.writeInt(1);intent.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_addProximityAlert, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void removeProximityAlert(android.app.PendingIntent intent) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);if ((intent!=null)) {_data.writeInt(1);intent.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_removeProximityAlert, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public android.os.Bundle getProviderInfo(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();android.os.Bundle _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_getProviderInfo, _data, _reply, 0);_reply.readException();if ((0!=_reply.readInt())) {_result = android.os.Bundle.CREATOR.createFromParcel(_reply);}else {_result = null;}}finally {_reply.recycle();_data.recycle();}return _result;}public boolean isProviderEnabled(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_isProviderEnabled, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());}finally {_reply.recycle();_data.recycle();}return _result;}public android.location.Location getLastKnownLocation(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();android.location.Location _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_getLastKnownLocation, _data, _reply, 0);_reply.readException();if ((0!=_reply.readInt())) {_result = android.location.Location.CREATOR.createFromParcel(_reply);}else {_result = null;}}finally {_reply.recycle();_data.recycle();}return _result;}// Used by location providers to tell the location manager when it has a new location.// Passive is true if the location is coming from the passive provider, in which case// it need not be shared with other providers.public void reportLocation(android.location.Location location, boolean passive) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);if ((location!=null)) {_data.writeInt(1);location.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeInt(((passive)?(1):(0)));mRemote.transact(Stub.TRANSACTION_reportLocation, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public boolean geocoderIsPresent() throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_geocoderIsPresent, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());}finally {_reply.recycle();_data.recycle();}return _result;}public java.lang.String getFromLocation(double latitude, double longitude, int maxResults, android.location.GeocoderParams params, java.util.List<android.location.Address> addrs) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.lang.String _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeDouble(latitude);_data.writeDouble(longitude);_data.writeInt(maxResults);if ((params!=null)) {_data.writeInt(1);params.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_getFromLocation, _data, _reply, 0);_reply.readException();_result = _reply.readString();_reply.readTypedList(addrs, android.location.Address.CREATOR);}finally {_reply.recycle();_data.recycle();}return _result;}public java.lang.String getFromLocationName(java.lang.String locationName, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, int maxResults, android.location.GeocoderParams params, java.util.List<android.location.Address> addrs) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.lang.String _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(locationName);_data.writeDouble(lowerLeftLatitude);_data.writeDouble(lowerLeftLongitude);_data.writeDouble(upperRightLatitude);_data.writeDouble(upperRightLongitude);_data.writeInt(maxResults);if ((params!=null)) {_data.writeInt(1);params.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_getFromLocationName, _data, _reply, 0);_reply.readException();_result = _reply.readString();_reply.readTypedList(addrs, android.location.Address.CREATOR);}finally {_reply.recycle();_data.recycle();}return _result;}public void addTestProvider(java.lang.String name, boolean requiresNetwork, boolean requiresSatellite, boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude, boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(name);_data.writeInt(((requiresNetwork)?(1):(0)));_data.writeInt(((requiresSatellite)?(1):(0)));_data.writeInt(((requiresCell)?(1):(0)));_data.writeInt(((hasMonetaryCost)?(1):(0)));_data.writeInt(((supportsAltitude)?(1):(0)));_data.writeInt(((supportsSpeed)?(1):(0)));_data.writeInt(((supportsBearing)?(1):(0)));_data.writeInt(powerRequirement);_data.writeInt(accuracy);mRemote.transact(Stub.TRANSACTION_addTestProvider, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void removeTestProvider(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_removeTestProvider, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void setTestProviderLocation(java.lang.String provider, android.location.Location loc) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);if ((loc!=null)) {_data.writeInt(1);loc.writeToParcel(_data, 0);}else {_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_setTestProviderLocation, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void clearTestProviderLocation(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_clearTestProviderLocation, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void setTestProviderEnabled(java.lang.String provider, boolean enabled) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);_data.writeInt(((enabled)?(1):(0)));mRemote.transact(Stub.TRANSACTION_setTestProviderEnabled, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void clearTestProviderEnabled(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_clearTestProviderEnabled, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void setTestProviderStatus(java.lang.String provider, int status, android.os.Bundle extras, long updateTime) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);_data.writeInt(status);if ((extras!=null)) {_data.writeInt(1);extras.writeToParcel(_data, 0);}else {_data.writeInt(0);}_data.writeLong(updateTime);mRemote.transact(Stub.TRANSACTION_setTestProviderStatus, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}public void clearTestProviderStatus(java.lang.String provider) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeString(provider);mRemote.transact(Stub.TRANSACTION_clearTestProviderStatus, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}// for NI supportpublic boolean sendNiResponse(int notifId, int userResponse) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();boolean _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeInt(notifId);_data.writeInt(userResponse);mRemote.transact(Stub.TRANSACTION_sendNiResponse, _data, _reply, 0);_reply.readException();_result = (0!=_reply.readInt());}finally {_reply.recycle();_data.recycle();}return _result;}}static final int TRANSACTION_getAllProviders = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);static final int TRANSACTION_getProviders = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);static final int TRANSACTION_getBestProvider = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);static final int TRANSACTION_providerMeetsCriteria = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);static final int TRANSACTION_requestLocationUpdates = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);static final int TRANSACTION_requestLocationUpdatesPI = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5);static final int TRANSACTION_removeUpdates = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6);static final int TRANSACTION_removeUpdatesPI = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7);static final int TRANSACTION_addGpsStatusListener = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8);static final int TRANSACTION_removeGpsStatusListener = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9);static final int TRANSACTION_locationCallbackFinished = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10);static final int TRANSACTION_sendExtraCommand = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11);static final int TRANSACTION_addProximityAlert = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12);static final int TRANSACTION_removeProximityAlert = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13);static final int TRANSACTION_getProviderInfo = (android.os.IBinder.FIRST_CALL_TRANSACTION + 14);static final int TRANSACTION_isProviderEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 15);static final int TRANSACTION_getLastKnownLocation = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16);static final int TRANSACTION_reportLocation = (android.os.IBinder.FIRST_CALL_TRANSACTION + 17);static final int TRANSACTION_geocoderIsPresent = (android.os.IBinder.FIRST_CALL_TRANSACTION + 18);static final int TRANSACTION_getFromLocation = (android.os.IBinder.FIRST_CALL_TRANSACTION + 19);static final int TRANSACTION_getFromLocationName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 20);static final int TRANSACTION_addTestProvider = (android.os.IBinder.FIRST_CALL_TRANSACTION + 21);static final int TRANSACTION_removeTestProvider = (android.os.IBinder.FIRST_CALL_TRANSACTION + 22);static final int TRANSACTION_setTestProviderLocation = (android.os.IBinder.FIRST_CALL_TRANSACTION + 23);static final int TRANSACTION_clearTestProviderLocation = (android.os.IBinder.FIRST_CALL_TRANSACTION + 24);static final int TRANSACTION_setTestProviderEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 25);static final int TRANSACTION_clearTestProviderEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 26);static final int TRANSACTION_setTestProviderStatus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 27);static final int TRANSACTION_clearTestProviderStatus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 28);static final int TRANSACTION_sendNiResponse = (android.os.IBinder.FIRST_CALL_TRANSACTION + 29);}public java.util.List<java.lang.String> getAllProviders() throws android.os.RemoteException;public java.util.List<java.lang.String> getProviders(android.location.Criteria criteria, boolean enabledOnly) throws android.os.RemoteException;public java.lang.String getBestProvider(android.location.Criteria criteria, boolean enabledOnly) throws android.os.RemoteException;public boolean providerMeetsCriteria(java.lang.String provider, android.location.Criteria criteria) throws android.os.RemoteException;public void requestLocationUpdates(java.lang.String provider, android.location.Criteria criteria, long minTime, float minDistance, boolean singleShot, android.location.ILocationListener listener) throws android.os.RemoteException;public void requestLocationUpdatesPI(java.lang.String provider, android.location.Criteria criteria, long minTime, float minDistance, boolean singleShot, android.app.PendingIntent intent) throws android.os.RemoteException;public void removeUpdates(android.location.ILocationListener listener) throws android.os.RemoteException;public void removeUpdatesPI(android.app.PendingIntent intent) throws android.os.RemoteException;public boolean addGpsStatusListener(android.location.IGpsStatusListener listener) throws android.os.RemoteException;public void removeGpsStatusListener(android.location.IGpsStatusListener listener) throws android.os.RemoteException;// for reporting callback completionpublic void locationCallbackFinished(android.location.ILocationListener listener) throws android.os.RemoteException;public boolean sendExtraCommand(java.lang.String provider, java.lang.String command, android.os.Bundle extras) throws android.os.RemoteException;public void addProximityAlert(double latitude, double longitude, float distance, long expiration, android.app.PendingIntent intent) throws android.os.RemoteException;public void removeProximityAlert(android.app.PendingIntent intent) throws android.os.RemoteException;public android.os.Bundle getProviderInfo(java.lang.String provider) throws android.os.RemoteException;public boolean isProviderEnabled(java.lang.String provider) throws android.os.RemoteException;public android.location.Location getLastKnownLocation(java.lang.String provider) throws android.os.RemoteException;// Used by location providers to tell the location manager when it has a new location.// Passive is true if the location is coming from the passive provider, in which case// it need not be shared with other providers.public void reportLocation(android.location.Location location, boolean passive) throws android.os.RemoteException;public boolean geocoderIsPresent() throws android.os.RemoteException;public java.lang.String getFromLocation(double latitude, double longitude, int maxResults, android.location.GeocoderParams params, java.util.List<android.location.Address> addrs) throws android.os.RemoteException;public java.lang.String getFromLocationName(java.lang.String locationName, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, int maxResults, android.location.GeocoderParams params, java.util.List<android.location.Address> addrs) throws android.os.RemoteException;public void addTestProvider(java.lang.String name, boolean requiresNetwork, boolean requiresSatellite, boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude, boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) throws android.os.RemoteException;public void removeTestProvider(java.lang.String provider) throws android.os.RemoteException;public void setTestProviderLocation(java.lang.String provider, android.location.Location loc) throws android.os.RemoteException;public void clearTestProviderLocation(java.lang.String provider) throws android.os.RemoteException;public void setTestProviderEnabled(java.lang.String provider, boolean enabled) throws android.os.RemoteException;public void clearTestProviderEnabled(java.lang.String provider) throws android.os.RemoteException;public void setTestProviderStatus(java.lang.String provider, int status, android.os.Bundle extras, long updateTime) throws android.os.RemoteException;public void clearTestProviderStatus(java.lang.String provider) throws android.os.RemoteException;// for NI supportpublic boolean sendNiResponse(int notifId, int userResponse) throws android.os.RemoteException;}


0 0
原创粉丝点击