2012-05-11 15 views
9

WiFi Directを使用するAndroid搭載端末は2台あります。あるデバイスでは、WifiP2pManagerクラスを使用して他のデバイスに関する情報を取得し、他のデバイスへの接続をリクエストできます。しかし、私が接続を要求すると、他のデバイスは小さなウィンドウをポップアップし、ユーザーに接続要求を受け入れるかどうかを尋ねます。AndroidでWi-Fiの自動接続を許可する方法

これらの接続要求を自動受け入れることはできますか?ユーザー確認なしで他のデバイスに接続できるようにするには?

+2

これはビット容疑者をどのように聞こえるか私は理解することができます。私はユーザーに知らせずにデバイスに接続しようとしています。しかし、我々は、車の追跡と伐採の基盤としてAndroidデバイスを使用する可能性について検討しています。だから、これらのデバイスは、そのような "ユーザー"を持っていません... –

+3

それは魚ではありません。私は彼と一緒に仕事をしています。私は彼の目的が退屈な正当なものであることを保証することができます。企業車の中でピアツーピアの接近警告のためにAndroidデバイスを使用しようとしているため、あらかじめ設定する必要があるソリューションは、誤用する。 –

+0

@DavidKethelあなたはその権限ダイアログを渡すための解決策を見つけましたか? – Hunt

答えて

2

あなたの周りの車両を追跡してログに記録するだけの場合、コメントに基づいて、本当にデバイスに接続する必要がありますか?

私はこのプロジェクトの範囲を知らないのですが、request the peers in the WifiP2pManagerのときに得られるWifiP2pDeviceListを単純に使うことができます。あなたはあなたの周りのデバイス(〜=車両)のリストを得ることができ、これを記録することができます。

私が推測するより詳細な情報を送信したい場合は、接続が便利です。

3

私の現在のAPIの理解から、ユーザーの介入なしに自動的に接続を受け入れることはできません。ユーザーの介入を必要としない接続を開始できます。両方のデバイスがモバイルデバイスの場合は、一方の側で接続要求を受け入れる必要があります。

私はこれをアンドロイドプロジェクトホスティングの機能リクエストとして入れました。 あなたの回答をここで監視することができます:https://code.google.com/p/android/issues/detail?id=30880

5

これは簡単にXposed frameworkの助けを借りて行うことができます。あなたはアンドロイドのJavaクラスの中の単一のメソッドを置き換えるだけです(snihalaniの答えのリンクを参照してください)。もちろん、Xposedを使用するには、あなたのデバイスは根づかなければなりません。主なアイデアは、私はSGS4ストック4.2.2 ROMにそれをテストし、それが働いた(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); 
    } 
} 

で発現させることができます。 アンドロイドのSubstrateの助けを借りて同じことができると思います。

1

フレームワークを変更できる場合は、受け入れウィンドウを無視して「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 
*/ 
} 
関連する問題