我有2個使用WiFi Direct的Android設備。在一臺設備上,我可以使用WifiP2pManager
類獲得有關其他設備的信息,並請求連接到其他設備。但是,當我請求連接時,另一臺設備會彈出一個小窗口,詢問用戶是否要接受連接請求。如何在Android中自動接受Wi-Fi Direct連接請求
是否可以自動接受這些連接請求? I.E能夠在沒有用戶確認的情況下連接到其他設備?
我有2個使用WiFi Direct的Android設備。在一臺設備上,我可以使用WifiP2pManager
類獲得有關其他設備的信息,並請求連接到其他設備。但是,當我請求連接時,另一臺設備會彈出一個小窗口,詢問用戶是否要接受連接請求。如何在Android中自動接受Wi-Fi Direct連接請求
是否可以自動接受這些連接請求? I.E能夠在沒有用戶確認的情況下連接到其他設備?
根據評論,如果你只是想跟蹤和記錄你周圍的車輛,你真的需要連接到設備嗎?
我不知道該項目的範圍,但你可以簡單地使用當你request the peers in the WifiP2pManager時得到的WifiP2pDeviceList。你可以得到你周圍的設備列表(〜=車輛)並記錄下來。
如果您想發送更多詳細信息,連接很有用。
根據我目前對API的理解,如果沒有用戶的干預,您無法真正接受連接。您可以啓動連接,不需要用戶干預。如果您的兩個設備都是移動設備,則必須在一端接受連接請求。
我已經把這個作爲一個功能請求在android項目託管。 你可以在這裏監控他們的迴應:https://code.google.com/p/android/issues/detail?id=30880
它可以很容易地完成在Xposed framework的幫助下。你只需要替換android java類中的單個方法(參見snihalani答案的鏈接)。但是,當然要使用Xposed,你的設備必須是紮根的。主要思想可以用下面的代碼表示(使用Xposed)
@Override
public void handleLoadPackage(LoadPackageParam lpparam) {
try {
Class<?> wifiP2pService = Class.forName("android.net.wifi.p2p.WifiP2pService", false, lpparam.classLoader);
for (Class<?> c : wifiP2pService.getDeclaredClasses()) {
//XposedBridge.log("inner class " + c.getSimpleName());
if ("P2pStateMachine".equals(c.getSimpleName())) {
XposedBridge.log("Class " + c.getName() + " found");
Method notifyInvitationReceived = c.getDeclaredMethod("notifyInvitationReceived");
final Method sendMessage = c.getMethod("sendMessage", int.class);
XposedBridge.hookMethod(notifyInvitationReceived, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
final int PEER_CONNECTION_USER_ACCEPT = 0x00023000 + 2;
sendMessage.invoke(param.thisObject, PEER_CONNECTION_USER_ACCEPT);
return null;
}
});
break;
}
}
} catch (Throwable t) {
XposedBridge.log(t);
}
}
我在SGS4股票4.2.2 ROM上測試它,它工作。 我想在Android的Substrate的幫助下可以完成相同的操作。
如果您可以修改框架,您可以忽略接受窗口並直接發送「PEER_CONNECTION_USER_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是否找到任何解決方案來傳遞該權限對話框 – Hunt