【发布时间】:2017-04-18 17:25:10
【问题描述】:
问题
我试图在用户启用或禁用高于 Android KitKat 的 Android 设备的网络共享功能时通知用户。
尽管通过反射访问了 WIFI Tethering 隐藏 API,但我无法找到类似的方法来告诉我是否启用了通过 USB/蓝牙的 Tethering。
对于 USB 网络共享
到目前为止,我将接收器清单声明更改为如下内容:
<receiver android:name=".features.tethering.TetheringReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_AP_STATE_CHANGED"/>
<action android:name="android.intent.action.ums_connected" />
<action android:name="android.net.conn.TETHER_STATE_CHANGED" />
</intent-filter>
</receiver>
有了这个,当 USB Tether 被禁用/启用时,我确实可以接收到一些操作,但是它不会发送当前状态,这意味着我收到了这个操作,但如果不是活动的,我只收到 3 个数组(ConnectivityManager. EXTRA_AVAILABLE_TETHER、ConnectivityManager.EXTRA_ACTIVE_TETHER 和 ConnectivityManager.EXTRA_ERRORED_TETHER)。
我在检查 ConnectivityManager 的源代码时发现了一个名为 tether 的方法,尽管我需要 WRITE_SETTINGS 权限。 有没有其他方法可以在没有写入设置权限的情况下检查 USB 共享状态?
对于蓝牙网络共享
因为蓝牙有点不同,到目前为止我无法接收任何广播或找到获取网络共享蓝牙当前状态的方法。
我把收到的东西改成这样了,但是我什么都收不到:
<receiver android:name=".features.tethering.TetheringReceiver">
<intent-filter>
<action android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
<action android:name="android.intent.action.ums_connected" />
<action android:name="android.net.conn.TETHER_STATE_CHANGED" />
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>
</receiver>
另外,我声明了以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
总结
我正在寻找一种无需任何危险权限即可了解 USB 和蓝牙网络共享当前状态的方法。有没有办法做到这一点?
我也确实在here 上应用了这个解决方案,但没有成功。
【问题讨论】:
标签: android bluetooth usb tethering