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
测试程序:
解析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是什么时候创建的呢?通过静态块
所以,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();
此函数创建线程,并执行;线程的作用是进入消息循环
解析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
通过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
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
- android4.04 gps架构
- android4.3 GPS定位问题
- Android4.4 GPS框架分析
- Android GPS架构分析
- Android GPS架构分析
- gps架构分析
- Android GPS架构分析
- Android GPS架构分析
- Android GPS架构分析
- Android210 android4.0调试GPS功能OK
- android4.1去除bluetooth和gps功能
- 如何在android4.0中开启GPS
- android4.1.2版本GPS模块的添加
- android4.0中强制开启GPS
- android4.1.2版本GPS模块的添加
- android4.1去除bluetooth和gps功能
- Android GPS架构分析-preview
- Android GPS架构分析-preview
- BZOJ 刷题记录 PART 5
- 为什么书呆子不受欢迎? 《黑客与画家》
- nefu2
- 信息系统项目管理师考试经验分享
- java零散的基础
- android4.04 gps架构
- 埃拉托色尼筛法
- sql on RDD字段数受限22个
- Item 1: distinguish between pointers and references
- 辗转相除法
- ICA特征提取
- 6 包,单例模式,访问修饰符(public、protected,private)Object String
- 超详细在Ubuntu下安装JDK图文解析
- Ubuntu下安装Oracle11g(图文教程)