※ [本文转录自 Soft_Job 看板 #1Ngtvj-8 ]
作者: mouse21 (小鼠) 看板: Soft_Job
标题: [请益] android透过反射去呼叫LocationManager的
时间: Thu Aug 11 03:20:10 2016
看到 LocationManager
大家可能都可以猜到我想干嘛
Fack GPS之类的APP都是透过 Mock Location去达到改变位置的效果
我就想从LocationManager 去着手,想从GPS芯片上来的路中做修改。
目前研究到 LocationManager有绑定到一个名为 LocationManagerService的物件
中间的接口为 ILocationManager
在LocationManager里有一个mService物件 形态为ILocationManaer
从别人的分析中找到 这个Interface中有一个很重要的Method是
reportLocation 对应于 gps_location_callback
也就是从他开始把GPS位置往上传递到各个 LocationListener
几个关键方法
ListenerTransport transport = wrapListener(listener, looper);
//其中的一个function
@Override
public void onLocationChanged(Location location) {
Message msg = Message.obtain();
msg.what = TYPE_LOCATION_CHANGED;
msg.obj = location;
mListenerHandler.sendMessage(msg);
}
mService.requestLocationUpdates(request, transport(上面的物件), intent, packageName);
mService中
public void reportLocation(Location location ,boolean){
//略过部分
if(mContext.checkCallingOrSelfPermission(
INSTALL_LOCATION_PROVIDER
)!=PcakagerManager.PERMISSION_GRANTER){
throw new SecurityException("Requires INSTALL_LOCATION_
PROVIDER permission")
}
Message m = Message.obtain(mLocationHandler,MESSAGE_LOCATION_CHANGED,location);
}
由此得知,透过reportLocation 可以将坐标传往所有注册的locationlistener
不过当我找到 reportLocation 并且呼叫他之后
出现了
Requires INSTALL_LOCATION_PROVIDER permission
也就是上面那个IF的内容QQ
那我现在是改成找到Handler ...
并且Message m = Message.obtain(mLocationHandler,MESSAGE_LOCATION_CHANGED,location);
成功的机会比较大吗QQ
(苦恼
避免误会
我的权限内有加上
<uses-permission
android:name="android.permission.INSTALL_LOCATION_PROVIDER"></uses-permission>