私の友人と私は、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());
}
}
}
あなたはWifi Directを使い続ける方法を見つけましたか?私は同じ問題を抱えています。一度Wi-Fiダイレクトを終了すると、手動で設定をオンにする必要があります。 – windchime
いいえ、わかったことはありません。うまくいけば、アンドロイドの開発者は今この機能をより使いやすくしました。 – cbartondock