Python中的GSM定位
我在S60上运行一个Python脚本文件:
import location
def current_location():
gsm_loc = location.gsm_location()
print gsm_loc
current_location()
结果它打印出来的是None,而不是包含mcc、mnc、lac和cellId的元组。
在我的Python命令行上,我看到位置在包含的权限列表之间。
这可能是什么问题呢?
情况的发展:
我想,也许我的问题是缺少权限。所以我去给PythonScriptShell文件签名。 我使用了OPDA网站 - 我知道他们会签署所有权限,除了三个我不使用的权限。 我把签名后的PythonScriptShell文件安装到我的手机(N95)上。权限列表的顶部没有变化。然后我又尝试运行脚本: 结果还是一样 - 打印出None。
如果有人能帮我解决这个问题,那真的很重要。
谢谢。
2 个回答
我在使用所有必要的脚本功能时遇到了同样的问题,包括:'PowerMgmnt'(电源管理)、'ReadDeviceData'(读取设备数据)、'WriteDeviceData'(写入设备数据)、'TrustedUI'(可信用户界面)、'ProtServ'(保护服务)、'SwEvent'(软件事件)、'Network services'(网络服务)、'LocalServices'(本地服务)、'ReadUserData'(读取用户数据)、'WriteUserData'(写入用户数据)、'Location'(位置)、'SurroundingsDD'(环境数据)、'UserEnviroment'(用户环境)。
我们来看一下来自 PythonForS60/module-repo/dev-modules/location.py
的源代码:
import e32
import _location
def gsm_location():
if e32.s60_version_info>=(3,0):
ret = _location.gsm_location()
if ret[4]==1: # relevant information ?
return (int(ret[0]),int(ret[1]),ret[2],ret[3])
else:
return None # information returned by _location.gsm_location() not relevant
else:
return _location.gsm_location()
在我的诺基亚 E71 上,e32.s60_version_info == (3,1)
,我也得到了 None
的值。
我不太明白“无关紧要”是什么意思,但直接调用
>>> import _location
>>> _location.gsm_location()
(u'257', u'01', 555, 11, 0)
返回的结果与我的实际目标相近。
我觉得我现在可以回答这个问题的一部分:
打印出None的原因是因为还需要一个额外的功能:ReadDeviceData,但这个功能没有包含在Python命令行上方的功能列表里。
不过,问题的另一部分仍然没有解决,为什么在我签署PythonScriptShell文件时,这个功能没有被包含进去?它并不是三个受限功能之一。