-1

我正在尝试从 bash 脚本调用公共 android 方法 getSSID()?我的目标是将 android 设备上当前连接的 SSID 返回到 bash 变量。

要求:

  • 必须以非 root 用户身份运行
  • 必须只使用 android 烘焙函数。
  • AKA 不需要额外的应用安装
  • 必须直接从简单的 bash 脚本运行。

以前:我一直在使用带有 grep 的 dumpsys 命令来检索我需要的内容,但现在看来我需要成为 root 才能工作,所以我正在寻找这个概念的替代品。

 $ dumpsys wifi | grep -i $grepwifi

所以我找到了这个公共api......

https://developer.android.com/reference/android/net/wifi/WifiInfo.html

但我无法弄清楚如何让它工作。我已经尝试了几个选项,例如下面列出的,但没有任何运气。

   $ am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiInfo.getSSID()
/system/bin/sh: syntax error: '(' unexpected

或者

$ am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiInfo.getSSID
Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.wifi.WifiInfo.getSSID }
Error type 3
Error: Activity class {com.android.settings/com.android.settings.wifi.WifiInfo.getSSID} does not exist.

我假设我只是没有正确地将网址放在一起。所以我希望有人能指出我如何构建这些命令的文档,这样一旦我通过 ssid chalange,我就可以继续探索其他公共 api,但如果有另一种简单的方法可以从设备中检索 wifi 信息,我会感谢任何可行的替代方案。

4

1 回答 1

0

首先,哪个设备和安卓版本不允许你使用dumpsys

无论如何,我将向您展示一种不需要dumpsys使用AndroidViewClient/culebra的方法。

您可以使用它culebra来生成脚本,然后根据您的需要稍微修改它。打开快速设置,然后运行

culebra -r -d true -t false -i false -o ssid.py

删除不需要的,添加一个正则表达式来匹配任何 SSID(不仅仅是你看到的那个),你应该有这样的东西

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2016  Diego Torres Milano
Created on 2016-11-09 by Culebra v12.4.0
                      __    __    __    __
                     /  \  /  \  /  \  /  \ 
____________________/  __\/  __\/  __\/  __\_____________________________
___________________/  /__/  /__/  /__/  /________________________________
                   | / \   / \   / \   / \   \___
                   |/   \_/   \_/   \_/   \    o \ 
                                           \_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''


import re
import sys
import os

from com.dtmilano.android.viewclient import ViewClient

TAG = 'CULEBRA'

_s = 5
_v = '--verbose' in sys.argv


kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
vc = ViewClient(device, serialno, **kwargs2)


vc.uiDevice.openQuickSettings()
vc.sleep(_s)

vc.dump(window='-1')
print vc.findViewWithContentDescriptionOrRaise(re.compile(u'''Connected to .*''')).getContentDescription()

或者,如果您愿意,可以使用Culebra GUI并通过 UI 执行这些操作。

于 2016-11-09T21:40:03.623 回答