如何在Android中自动接受Wi-Fi直接连接请求

如何在Android中自动接受Wi-Fi直接连接请求,android,wifi-direct,wifip2p,Android,Wifi Direct,Wifip2p,我有两台使用WiFi Direct的Android设备。在一台设备上,我可以使用WifiP2pManager类获取关于另一台设备的信息,并请求与另一台设备的连接。但是,当我请求连接时,另一个设备会弹出一个小窗口,询问用户是否愿意接受连接请求 是否可以自动接受这些连接请求?即,无需用户确认即可连接到其他设备?根据评论,如果您只想跟踪和记录周围的车辆,是否真的需要连接到设备 我不知道这个项目的范围,但是你可以简单地使用当你完成这个项目时你得到的。您可以获得周围设备(~=车辆)的列表,并将其记录下来

我有两台使用WiFi Direct的Android设备。在一台设备上,我可以使用
WifiP2pManager
类获取关于另一台设备的信息,并请求与另一台设备的连接。但是,当我请求连接时,另一个设备会弹出一个小窗口,询问用户是否愿意接受连接请求


是否可以自动接受这些连接请求?即,无需用户确认即可连接到其他设备?

根据评论,如果您只想跟踪和记录周围的车辆,是否真的需要连接到设备

我不知道这个项目的范围,但是你可以简单地使用当你完成这个项目时你得到的。您可以获得周围设备(~=车辆)的列表,并将其记录下来


如果您想发送更详细的信息,我想连接是很有用的。

根据我目前对API的理解,没有用户的干预,您无法真正自动接受连接。您可以启动不需要用户干预的连接。如果您的两台设备都是移动设备,则必须在一端接受连接请求

我已经把它作为android项目托管中的一个功能请求。
您可以在此处监视他们的响应:

在您的帮助下,可以轻松完成此操作。您只需要替换其中一个android java类中的单个方法(参见snihalani答案中的链接)。当然,要使用Xposed,您的设备必须是根设备。主要思想可以用以下代码表示(使用Xposed)

@覆盖
公共无效handleLoadPackage(LoadPackageParam lpparam){
试一试{
Class wifiP2pService=Class.forName(“android.net.wifi.p2p.wifiP2pService”,false,lpparam.classLoader);
对于(类c:wifiP2pService.getDeclaredClasses()){
//log(“内部类”+c.getSimpleName());
if(“P2pStateMachine”.equals(c.getSimpleName())){
log(“类”+c.getName()+“找到”);
方法notifyInvitationReceived=c.getDeclaredMethod(“notifyInvitationReceived”);
最终方法sendMessage=c.getMethod(“sendMessage”,int.class);
hookMethod(notifyInvitationReceived,new XC_MethodReplacement()){
@凌驾
受保护对象replaceHookedMethod(MethodHookParam param)抛出可丢弃的{
最终int对等连接用户接受=0x00023000+2;
调用(param.thisObject,PEER\u CONNECTION\u USER\u ACCEPT);
返回null;
}
});
打破
}
}
}捕获(可丢弃的t){
XposedBridge.log(t);
}
}
我在SGS4 stock 4.2.2 ROM上测试了它,它运行正常。
我想在android的帮助下也可以做到这一点。

如果你可以修改框架,你可以忽略accept窗口,直接发送“PEER\u CONNECTION\u USER\u accept”

基于Android 5.0,“frameworks/opt/net/wifi/service/java/com/Android/server/wifi/p2p/WifiP2pServiceImpl.java”

您必须找到“notifyInvitationReceived”,并修改为

private void notifyInvitationReceived() {
    /*Direct sends the accept message.*/
    sendMessage(PEER_CONNECTION_USER_ACCEPT);
/*
... old code
*/
}

我能理解这听起来有点可疑。就像我试图在用户不知道的情况下连接到设备一样。但我们正在考虑使用android设备作为车辆跟踪和记录基础的可能性。所以这些设备不会有这样的“用户”…这并不可疑。我和他一起工作,我可以向你保证,他的目的是非常合法的——我们正试图在公司车队中使用Android设备进行点对点接近警告——因此,需要预先配置的解决方案是完全可以接受的,更不用说不易被滥用了。@DavidKethel你找到任何解决方案来传递该权限对话框了吗
private void notifyInvitationReceived() {
    /*Direct sends the accept message.*/
    sendMessage(PEER_CONNECTION_USER_ACCEPT);
/*
... old code
*/
}