2014-07-20 3 views
7

क्या कोड के माध्यम से सीधे वाईफ़ाई के डिवाइस का नाम बदलना संभव है? मैंने कोशिश की है:वाईफ़ाई प्रत्यक्ष पी 2 पी में डिवाइस का नाम कैसे बदलें?

private WifiP2pDevice wDevice; 
wDevice.deviceName = "newName"; 

लेकिन जाहिर है, यह काम नहीं करता है। कोई विचार ?!

उत्तर

8

जावा के कोड उपयोग प्रतिबिंब एपीआई के बाद, यह दक्षता की कमी के कारण कम preferrable है लेकिन Android एक और तरीका है इसलिए प्रदान नहीं करता है, आप इसे आकर्षण के साथ काम करता है का उपयोग कर सकते हैं:

try { 
     Method m = wpm.getClass().getMethod(
       "setDeviceName", 
       new Class[] { WifiP2pManager.Channel.class, String.class, 
         WifiP2pManager.ActionListener.class }); 

     m.invoke(WifiP2pManager wifimngr,WifiP2pManager.Channel wifichannel, new_name, new WifiP2pManager.ActionListener() { 
      public void onSuccess() { 
       //Code for Success in changing name 
      } 

      public void onFailure(int reason) { 
       //Code to be done while name change Fails 
      } 
     }); 
    } catch (Exception e) { 

     e.printStackTrace(); 
    } 
+0

क्या आप संभवतः विस्तृत कर सकते हैं और समझा सकते हैं कि यह कोड क्यों बाहर निकल जाएगा, और यह क्या करता है? धन्यवाद – yochannah

6

इस कोड मेरे लिए काम करता ।

WifiP2pManager manager; 
WifiP2pManager.Channel channel; 
    try { 
     manager = (WifiP2pManager)getSystemService(Context.WIFI_P2P_SERVICE); 
     channel = manager.initialize(this, getMainLooper(), new WifiP2pManager.ChannelListener() { 
      @Override 
      public void onChannelDisconnected() { 
       manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 
      } 
     }); 
     Class[] paramTypes = new Class[3]; 
     paramTypes[0] = WifiP2pManager.Channel.class; 
     paramTypes[1] = String.class; 
     paramTypes[2] = WifiP2pManager.ActionListener.class; 
     Method setDeviceName = manager.getClass().getMethod(
       "setDeviceName", paramTypes); 
     setDeviceName.setAccessible(true); 

     Object arglist[] = new Object[3]; 
     arglist[0] = channel; 
     arglist[1] = devName; 
     arglist[2] = new WifiP2pManager.ActionListener() { 

      @Override 
      public void onSuccess() { 
       Log.d("setDeviceName succeeded", "true"); 
      } 

      @Override 
      public void onFailure(int reason) { 
       Log.d("setDeviceName failed", "true"); 
      } 
     }; 
     setDeviceName.invoke(manager, arglist); 

    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
+0

आज एंड्रॉइड 6.0.1 पर इसका परीक्षण किया - बहुत अच्छा काम करता है। धन्यवाद। –

+0

यह काम करता है, क्या सुरक्षा के लिए कोई जोखिम है? WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION के साथ प्रसारित इरादे के बारे में क्या? – user3290180

संबंधित मुद्दे