2012-10-17 20 views
19

Android cihazlar için bir erişim noktası oluşturmak için kodu yazdım. Hem emülatör hem de gerçek cihaz üzerinde test yaptım.Ama işe yaramaz. Nerede yanlış anladım?Program aracılığıyla erişim noktası nasıl oluşturulur

public class MainWAP extends Activity { 

    WifiManager wifiManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_wap); 
    } 

    public void openWifi(View v) { 
     createWifiAccessPoint(); 
    } 

    private void createWifiAccessPoint() { 
     if (wifiManager.isWifiEnabled()) { 
      wifiManager.setWifiEnabled(false); 
     } 
     Method[] wmMethods = wifiManager.getClass().getDeclaredMethods(); 
     boolean methodFound = false; 
     for (Method method: wmMethods) { 
      if (method.getName().equals("setWifiApEnabled")) { 
       methodFound = true; 
       WifiConfiguration netConfig = new WifiConfiguration(); 
       netConfig.SSID = "AccessPoint"; 
       netConfig.allowedAuthAlgorithms.set(
        WifiConfiguration.AuthAlgorithm.OPEN); 
       try { 
        boolean apstatus = (Boolean) method.invoke(
         wifiManager, netConfig, true); 
        for (Method isWifiApEnabledmethod: wmMethods) { 
         if (isWifiApEnabledmethod.getName().equals(
           "isWifiApEnabled")) { 
          while (!(Boolean) isWifiApEnabledmethod.invoke(
            wifiManager)) {}; 
          for (Method method1: wmMethods) { 
           if (method1.getName().equals(
             "getWifiApState")) { 
            int apstate; 
            apstate = (Integer) method1.invoke(
             wifiManager); 
           } 
          } 
         } 
        } 
        if (apstatus) { 
         Log.d("Splash Activity", 
          "Access Point created"); 
        } else { 
         Log.d("Splash Activity", 
          "Access Point creation failed"); 
        } 

       } catch (IllegalArgumentException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } catch (InvocationTargetException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     if (!methodFound) { 
      Log.d("Splash Activity", 
       "cannot configure an access point"); 
     } 
    } 
} 
+0

Bir çeşit ilgili hata mesajı alıyor musunuz? Günlük mesaj? – WilHall

+0

şimdi de @daniel çözüldü mü? Henüz yapmadıysanız – gumuruh

+0

. Lütfen bunun dışarıda yardımcı olabileceğini umuyoruz: http://omtlab.com/android-check-network-connection-available-using-wifi/ @daniel – gumuruh

cevap

0

Yansımayı kullanarak belgesiz API'leri kullanma yönteminizle, tüm senaryolarda işler iyi çalışmayabilir. Eh, bunları manifest dosyanıza eklemeyi deneyebilir ve deneyebilirsiniz.

android.permission.ACCESS_WIFI_STATE 
android.permission.CHANGE_WIFI_STATE 
android.permission.WRITE_APN_SETTINGS 
+0

Bildiri dosyasında ekledim: android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_NETWORK_STATE, android.permission.INTERNET android.permission.ACCESS_NETWORK_STATE, android.hardware.wifi, android.permission.WRITE_APN_SETTINGS. Ama ben emülatörde koşup butona tıkladığımda, pop-up gücü kapanır. – daniel

+0

Günlük iletisinde: java.lang.reflect.InvocationTargetException tarafından neden olunan 2) java.lang.NullPointerException neden oldu – daniel

+0

1) java.lang.reflect.InvocationTargetException tarafından satırda 27: 'createWifiAccessPoint(); ' 2) java.lang.NullPointerException tarafından satır 33’de:' if (wifiManager.isWifiEnabled()) '@WilHall – daniel

7

Sizin WiFiManager kesinlikle başlatılamıyor. senin onCreate yöntemde

bu eklentiyi: Bu kod işe yapmak birkaç şey ihtiyaç

wifiManager = (WiFiManager) getSystemService(Context.WIFI_SERVICE); 
+0

@ Nedenden kaynaklanıyorsa, bu sorunun bir cevabıdır. Eğer WiFiManager'ı başlatacaksa (ve şimdi "null" ise) her şey iyi çalışacaktır (sadece test ettim). –

+0

Az önce bir gerçeği belirttiniz. Bence, belirli bir soruyla nasıl ilişkilendiğini ve sorunu çözmek için ne yapılması gerektiğini açıklamalısınız. Cevabınızın otomatik olarak düşük kaliteli olarak sınıflandırılmasının bir nedeni var. – toniedzwiedz

+0

@Tom belki sadece çok kısa olduğu için :)? Onu güncelleyeceğim. –

3

.

1) Init wifiManager onCreate():

WifiManager wifiManager = (WiFiManager) getSystemService(Context.WIFI_SERVICE); 

2) Sen AndroidManifest.xml bu izinleri için sormak gerekir:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /> 

3) Başvurunuz sistem sertifikalarla imzalanmış olması gerekir.

+3

3. adımda ne demek istiyorsun? –

+0

@FabricioPH Bir sistem uygulaması olması gerektiği anlamına geliyordu, 'WRITE_APN_SETTINGS' kullanmayı denerseniz, yalnızca sistem uygulamalarının bu izni kullanabileceğini söylüyor. – JediBurrell

İlgili konular