2013-06-11 15 views
5

私の友人と私は、wifi-directを使ってアンドロイドデバイス間で同期された音楽をストリームするアプリを開発しています。私たちの問題は、電話機が接続されるとアプリがかなりうまく動作しますが、すべてのAOSPデバイスでWi-FiダイレクトがWi-Fiダイレクトメニューに入るとオンになるため、電話を接続するには何らかの処理が必要です(そして、 )。これにより、アプリケーション内での接続がかなり困難になります。私たちは、コードからwifi directをオンにして、それを維持する方法があるかどうか疑問に思っていました(Reflectionを使用してこれを行う方法の詳細については誰でも参照できます)。Wifi-DirectでAOSPデバイスを有効にする

ありがとうございます!ここに私たちの現在のコードは次のとおりです。

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()); 
    } 
} 

}

+0

あなたはWifi Directを使い続ける方法を見つけましたか?私は同じ問題を抱えています。一度Wi-Fiダイレクトを終了すると、手動で設定をオンにする必要があります。 – windchime

+0

いいえ、わかったことはありません。うまくいけば、アンドロイドの開発者は今この機能をより使いやすくしました。 – cbartondock

答えて

0

それは我々がWiFiの直接の我々のアプリに備えて追加すると、我々はと格闘してきた質問をされている...この質問をしていただきありがとうございます。

異なるメーカーの複数の電話機の設定を見て、thisthisのようなページを読むと(詳細はあまり正確ではありませんが、われわれが見つけることができます)、結論に至りました別途WiFi Direct をオンにする必要はありません。:Wi-Fiが有効になっている場合は常に有効になります。したがって、ほとんどの場合、あなたのアプリはturn on WiFiになるはずです。

ただし、WiFi Direct (およびスキャンの可視性)は、WiFi Direct設定ページに移動して開始したものです。

(サードパーティかかわらappscananddoは独自のスキャンを開始する)スキャンを停止することがあり、そのページを残しますが、WiFiの直接を無効にするべきではありません。あなたが言うように、それはアプリがWiFi Directを使用するのは困難(不可能)になるでしょうが、appsはそれをうまく使います。その設定ページを離れたときにWiFi Directが無効になっているように見えたのは何でしたか?

関連する問題