保持AOSP设备的Wifi-Direct开启状态

6
我的朋友和我正在开发一款应用,它可以使用wifi-direct在安卓设备之间流同步音乐。我们的问题是,虽然一旦手机连接上了应用就可以很好地工作,但是要让手机连接起来需要花费一些时间,因为在所有AOSP设备上,似乎只有在进入wifi直连菜单后才会打开wifi直连功能(并在退出后立即关闭)。这使得应用内连接变得相当困难。我们想知道是否有办法从代码中打开wifi直连并保持其打开状态(如果有人能够引导我们详细描述如何使用反射来实现这一点,那就太棒了)。
谢谢!这是我们当前的代码:
public class Reflector {
static Method turnOnICS;
static Method turnOnJB;
static Method turnOffICS;

public static void turnOnP2P(WifiP2pManager m, Channel c) {
    //Log.v("button", "turnOnP2P");
    if (android.os.Build.VERSION.SDK_INT == 14 || android.os.Build.VERSION.SDK_INT == 15) {
        //Log.v("version", "Version is ICS");
        try {
            turnOnICS = WifiP2pManager.class.getDeclaredMethod("enableP2p",WifiP2pManager.Channel.class);
            turnOnICS.setAccessible(true);
            turnOnICS.invoke(m, c);
        } catch (NoSuchMethodException e) {
            Log.v("ics_error", "ICS enableP2p() not found");
        } catch (Exception e) {
            Log.v("ics_error", "turnOnICS invocation failure");
        }
    } else if (android.os.Build.VERSION.SDK_INT == 16 || android.os.Build.VERSION.SDK_INT == 17) {
        //Log.v("version", "Version is JB");
        try {
            turnOnJB = NsdManager.class.getDeclaredMethod("setEnabled", boolean.class);
            turnOnJB.setAccessible(true);
            turnOnJB.invoke(NsdManager.class, true);
            //must feed it an nsdmanager, but none exists in wifidirectactivity
            Log.v("nsd", "problem");
        } catch (NoSuchMethodException e) {
            Log.v("jb_error", "JB setEnabled() not found");
        } catch (Exception e) {
            Log.v("jb_error", "turnOnJB invocation failure");
            e.printStackTrace();
        }
    }
}

public static void turnOffP2P(WifiP2pManager m, Channel c) {
    //Log.v("button", "turnOffP2P");
    if (android.os.Build.VERSION.SDK_INT == 14 || android.os.Build.VERSION.SDK_INT == 15) {
        //Log.v("version", "Version is ICS");
        try {
            turnOffICS = WifiP2pManager.class.getDeclaredMethod("disableP2p", WifiP2pManager.Channel.class);
            turnOffICS.setAccessible(true);
            turnOffICS.invoke(m, c);
        } catch (NoSuchMethodException e) {
            Log.v("ics_error", "ICS disableP2P() not found");
        } catch (Exception e) {
            Log.v("ics_error", "turnOffICS invocation failure");
        }
    }
}

public static void printAll(){
    Method[] list = WifiP2pManager.class.getDeclaredMethods();
    for(Method m : list){
        Log.v("tag",m.getName());
    }
}

}


你有找到保持Wifi Direct开启的方法吗?我遇到同样的问题,一旦Wifi Direct退出,我必须手动进入设置来打开它。 - windchime
不,我们从来没有弄清楚。希望现在安卓开发者已经使这个功能更加易于访问了。 - cbartondock
1个回答

0

感谢您提出这个问题...随着我们在应用程序中添加WiFi Direct功能,这是我们一直在努力解决的问题。

在查看来自不同制造商的几部手机的设置,并阅读诸如thisthis之类的页面后(尽管细节不是很精确,但这是我们能找到的最好的资料),我们得出结论:没有必要单独打开WiFi Direct per se:只有在启用WiFi时才能启用它。因此,最多,您的应用程序需要打开WiFi

但是,WiFi Direct 扫描(以及被扫描的可见性)是通过转到WiFi Direct设置页面来初始化的。

离开该页面可能会停止扫描(尽管第三方应用程序 可以 并且 启动自己的扫描),但不应禁用WiFi Direct。这完全没有意义...正如您所说,这将使应用程序难以(甚至不可能)使用WiFi Direct,但是应用程序确实成功使用它。您看到了什么让您觉得离开该设置页面时WiFi Direct被禁用了?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接