WifiP2pGroup — перезапустить постоянную группу?

Я заметил, что всякий раз, когда я использую WifiP2pManager.createGroup() (Reference) для создания точки доступа Wi-Fi, полностью новой сети (новый SSID и пароль ) создано. Эта новая группа сохраняется как постоянная группа, хотя в моем случае она используется только один раз. Это приводит к тому, что многие «одноразовые группы» засоряют настройки WiFi Direct/WiFi P2P.

Есть способ для удаления всех постоянных групп WiFi P2P, но повторное использование одной группы все время было бы гораздо более чистым решением. Фактически эта опция доступна пользователю:

Изображение

Я просто не могу понять, как использовать это программно... но, возможно, кто-то из вы сможет ;)

Любая помощь приветствуется!


person Candor    schedule 10.08.2016    source источник


Ответы (1)


WiFi-Buddy — это библиотека, которая может быть вам полезна. Существует метод removePersistentGroups(), который использует отражение Java для вызова метода removePersistentGroup() в Wi-Fi Direct API.

/**
 * Removes persistent/remembered groups
 *
 * Source: https://android.googlesource.com/platform/cts/+/jb-mr1-dev%5E1%5E2..jb-mr1-dev%5E1/
 * Author: Nick  Kralevich <[email protected]>
 *
 * WifiP2pManager.java has a method deletePersistentGroup(), but it is not accessible in the
 * SDK. According to Vinit Deshpande <[email protected]>, it is a common Android paradigm to
 * expose certain APIs in the SDK and hide others. This allows Android to maintain stability and
 * security. As a workaround, this removePersistentGroups() method uses Java reflection to call
 * the hidden method. We can list all the methods in WifiP2pManager and invoke "deletePersistentGroup"
 * if it exists. This is used to remove all possible persistent/remembered groups. 
 */
private void removePersistentGroups() {
    try {
        Method[] methods = WifiP2pManager.class.getMethods();
        for (int i = 0; i < methods.length; i++) {
            if (methods[i].getName().equals("deletePersistentGroup")) {
                // Remove any persistent group
                for (int netid = 0; netid < 32; netid++) {
                    methods[i].invoke(wifiP2pManager, channel, netid, null);
                }
            }
        }
        Log.i(TAG, "Persistent groups removed");
    } catch(Exception e) {
        Log.e(TAG, "Failure removing persistent groups: " + e.getMessage());
        e.printStackTrace();
    }
}
person Brendan    schedule 12.08.2016
comment
Спасибо за ваш ответ, но я пытаюсь перезапустить существующую группу, чтобы ее SSID/пароль остались прежними... - person Candor; 14.08.2016