在AOSP设备上保持wifi直接打开



我和我的朋友正在开发一个应用程序,可以通过wifi-direct在android设备之间传输同步音乐。我们的问题是,虽然这个应用程序在手机连接后运行得相当好,但要让手机连接需要一些时间,因为在所有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 本身:只要WiFi启用,它就会启用。所以,你的应用最多需要打开WiFi。

然而,WiFi Direct 扫描(和被扫描的可见性)是你通过进入WiFi Direct设置页面启动的。

离开该页面可能会停止扫描(尽管第三方应用程序可以并且确实启动了自己的扫描),但不应该禁用WiFi Direct。那根本说不通……正如你所说,这将使应用程序很难(不可能)使用WiFi Direct,但应用程序确实成功地使用了它。当你离开设置页面时,你看到了什么使WiFi Direct看起来是被禁用的?

相关内容

  • 没有找到相关文章

最新更新