2013-06-11 3 views
5

친구와 저는 wifi-direct를 사용하여 Android 기기간에 동기화 된 음악을 스트리밍하는 앱을 개발 중입니다. 우리의 문제는 일단 휴대 전화가 연결되면 응용 프로그램이 잘 작동하지만 모든 AOSP 장치에서 Wi-Fi Direct가 Wi-Fi Direct 메뉴에 들어올 때만 켜지 기 때문에 전화 연결을 위해 일부 작업이 필요하다는 것입니다.). 이것은 응용 프로그램 내 연결을 다소 어렵게 만듭니다. 우리는 코드에서 wifi direct를 켜고 계속 유지할 수있는 방법이 있는지 궁금하게 생각하고있었습니다 (누군가 Reflection을 사용하여 환상적인 방법을 사용하는 방법에 대한 자세한 설명을 참조 할 수 있다면).AOSP 기기에서 Wi-Fi Direct 켜기 유지

감사합니다. 우리가 우리가 와이파이 직접 우리의 응용 프로그램에 기능을 추가 할 때와 레슬링 봤는데 질문이었다 ...

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를 사용하는 방법을 찾았습니까? 나는 wifi가 직접 나가면 수동으로 설정을 켜야한다는 같은 문제에 직면 해있다. – windchime

+0

아니, 우리는 그것을 결코 이해하지 못했다. 잘하면 안드로이드 devs이 기능을 지금까지 더 접근 가능하게 만들었습니다. – cbartondock

답변

0

이 질문을 주셔서 감사합니다 것 : 여기에 우리의 현재의 코드입니다.

다른 제조업체의 여러 휴대 전화 설정을 살펴본 후 thisthis과 같은 페이지를 읽은 후에 (세부 사항에서는 그다지 정확하지 않지만 실제로는 찾을 수 있음) 결론을 내 렸습니다. Wi-Fi Direct 그 자체를으로 별도로 설정할 필요가 없습니다. Wi-Fi가 사용 설정 될 때마다 사용 설정됩니다. 따라서 대부분 앱은 turn on WiFi이 필요합니다.

그러나 WiFi Direct (검색 가능성)은 Wi-Fi Direct 설정 페이지로 이동하면 시작할 수 있습니다.

(제 3 자하지만 appscananddo가 자신의 스캔을 시작) 스캔을 중지 할 수 있습니다 해당 페이지를 떠나하지만 와이파이 다이렉트를 사용하지 않도록해야한다. 그렇게 말하면 ... 앱이 Wi-Fi Direct를 사용하는 것이 어렵다 (불가능).하지만 apps을 사용하면 앱을 성공적으로 사용하게됩니다. WiFi Direct가 설정 페이지에서 나왔을 때 사용 중지 된 것처럼 보인 부분이 무엇입니까?