2013-04-25 24 views
1

下面的方法enableHotspot適用於開放網絡,但如果我使用那些未註釋的配置設置WPA2網絡,wifi綁定仍會保留約10秒鐘,沒有執行任何其他操作或觸摸屏幕,操作系統崩潰,我得到一個黑屏。 3秒後,它返回禁用wifi tethering並關閉應用程序。 。Galaxy Note - 使用WPA2打開wifi共享時,Android操作系統崩潰(而不是應用程序)

如果我運行上的銀河標籤7" 或中國裝置中,通過自身的設備重啓相同的過程

這裏是上面提到的方法:

public static void enableHotspot(String networkSSID,String networkPass, Context context){ 
    // Enable tethering 
    WifiConfiguration config = new WifiConfiguration(); 
    config.SSID = networkSSID; 

    //WPA2 
    config.hiddenSSID = true; 
    config.preSharedKey = quoteNonHex(networkPass, 64); 
    config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    config.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // For WPA2 
    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); //this needs a server radius 
    config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 

    //Simpler WPA2 
    //config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    //config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 

    //OPEN 
    //config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 

    WifiApManager wapm = new WifiApManager(context); 
    wapm.setWifiApEnabled(config, true); 

    Log.d("","Wifi Tethering is enabled."); 

} 



private static String quoteNonHex(String value, int... allowedLengths) { 
    return isHexOfLength(value, allowedLengths) ? value : convertToQuotedString(value); 
} 

private static boolean isHexOfLength(CharSequence value, int... allowedLengths) { 
    if (value == null || !HEX_DIGITS.matcher(value).matches()) { 
     return false; 
    } 
    if (allowedLengths.length == 0) { 
     return true; 
    } 
    for (int length : allowedLengths) { 
     if (value.length() == length) { 
      return true; 
     } 
    } 
    return false; 
} 

UPDATE 1

以下是根據我的應用程序名稱過濾的日誌,Clicked on Card Button正好是enableHotspot開始執行的點:

   04-25 16:43:10.610: I/SalesTest.activity.SalesCheckout(12526): Clicked on Card Button 
      04-25 16:43:10.710: D/(12526): Wifi Tethering is enabled. 
      04-25 16:43:10.840: D/dalvikvm(12526): GC_CONCURRENT freed 1709K, 35% free 32659K/49991K, paused 1ms+3ms 
      04-25 16:43:34.805: I/ActivityThread(12526): Removing dead content provider: settings 
      04-25 16:43:36.060: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.060: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.060: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.060: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.060: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.065: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.065: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.065: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.065: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 
      04-25 16:43:36.065: E/InputQueue-JNI(12526): channel 'xxxx' ~ Publisher closed input channel or an error occurred. events=0x8 

以下是完整的日誌,請注意*** FATAL EXCEPTION IN SYSTEM PROCESS

   04-25 16:43:10.610: I/testSalesactivity.SalesCheckout(12526): Clicked on Card Button 
      04-25 16:43:10.625: I/power(8588): *** acquire_dvfs_lock : lockType : 1 freq : 1000000 
      04-25 16:43:10.625: I/ActivityManager(8588): START {intent.toShortString} from pid 12526 
      04-25 16:43:10.625: D/PowerManagerService(8588): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1000000 uid : 1000 pid : 8588 tag : ActivityManager 
      04-25 16:43:10.625: W/ActivityManager(8588): mDVFSLock.acquire() 
      04-25 16:43:10.645: D/ActivityManager(8588): Trying to launch applicationName 
      04-25 16:43:10.660: I/SurfaceFlinger(1690): id=161(18) createSurface 0x33e6c (1x1),1 flag=0 
      04-25 16:43:10.660: D/PowerManagerService(8588): acquireWakeLock flags=0xa tag=KEEP_SCREEN_ON_FLAG uid=1000 pid=8588 myUID=1000 myPID=8588 myTID=8588 
      04-25 16:43:10.705: E/WifiService(8588): Invoking mWifiStateMachine.setWifiEnabled 
      04-25 16:43:10.705: D/WifiService(8588): setWifiApEnabled: allowWifiAp: true 
      04-25 16:43:10.710: D/(12526): Wifi Tethering is enabled. 
      04-25 16:43:10.710: D/WifiP2pService(8588): P2pDisabledState{ what=131203 when=-1ms } 
      04-25 16:43:10.720: E/WifiHW(8588): check .ccode.info 
      04-25 16:43:10.720: E/WifiHW(8588): /data/.ccode.info already exist! 
      04-25 16:43:10.720: E/WifiHW(8588): ====[WIFI]MODULE is semcove===== 
      04-25 16:43:10.725: D/com.android.internal.telephony.gsm.FastDormancyStateHelper(8782): onReceive() action=android.net.wifi.WIFI_AP_STATE_CHANGED 
      04-25 16:43:10.765: I/SurfaceFlinger(1690): id=162(19) createSurface 0x3ffe4 (800x1280),2 flag=400 
      04-25 16:43:10.765: V/PhoneStatusBar(8701): setLightsOn(true) 
      04-25 16:43:10.790: I/ClipboardServiceEx(8588): mCBPickerDialog enter case. MSG_DISMISS_DIALOG 
      04-25 16:43:10.840: D/dalvikvm(12526): GC_CONCURRENT freed 1709K, 35% free 32659K/49991K, paused 1ms+3ms 
      04-25 16:43:10.850: D/DEFERED_APP_VISIBILITY(8588): tweaking closing app 
      04-25 16:43:10.855: I/ActivityManager(8588): Displayed shortComponentName: +213ms 
      04-25 16:43:11.080: I/SurfaceFlinger(1690): id=160 Removed idx=2 Map Size=5 
      04-25 16:43:11.080: I/SurfaceFlinger(1690): id=160 Removed idx=-2 Map Size=5 
      04-25 16:43:11.080: I/power(8588): *** release_dvfs_lock : lockType : 1 
      04-25 16:43:11.080: D/PowerManagerService(8588): releaseDVFSLockLocked : all DVFS_MIN_LIMIT are released 
      04-25 16:43:11.080: W/ActivityManager(8588): mDVFSLock.release() 
      04-25 16:43:11.840: D/com.android.internal.telephony.gsm.FastDormancyStateHelper(8782): onReceive() action=android.net.conn.TETHER_STATE_CHANGED 
      04-25 16:43:11.840: D/Tethering(8588): sendTetherStateChangedBroadcast 1, 0, 0 
      04-25 16:43:11.840: E/MTPJNIInterface(10598): tethering status = false 
      04-25 16:43:11.855: D/Tethering(8588): InitialState.processMessage what=4 
      04-25 16:43:11.860: D/Tethering(8588): sendTetherStateChangedBroadcast 0, 0, 0 
      04-25 16:43:11.860: D/com.android.internal.telephony.gsm.FastDormancyStateHelper(8782): onReceive() action=android.net.conn.TETHER_STATE_CHANGED 
      04-25 16:43:11.865: E/MTPJNIInterface(10598): tethering status = false 
      04-25 16:43:11.870: D/SoftapController(8552): Softap fwReload - Ok 
      04-25 16:43:11.870: W/dalvikvm(8588): threadid=83: thread exiting with uncaught exception (group=0x40c721f8) 
      04-25 16:43:11.875: E/AndroidRuntime(8588): *** FATAL EXCEPTION IN SYSTEM PROCESS: Thread-127 
      04-25 16:43:11.875: E/AndroidRuntime(8588): java.lang.NullPointerException 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at java.nio.charset.ModifiedUtf8.countBytes(ModifiedUtf8.java:75) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at java.nio.charset.ModifiedUtf8.encode(ModifiedUtf8.java:119) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at java.io.DataOutputStream.writeUTF(DataOutputStream.java:197) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at android.net.wifi.WifiApConfigStore.writeApConfiguration(WifiApConfigStore.java:187) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at android.net.wifi.WifiApConfigStore.access$400(WifiApConfigStore.java:47) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at android.net.wifi.WifiApConfigStore$ActiveState$1.run(WifiApConfigStore.java:118) 
      04-25 16:43:11.875: E/AndroidRuntime(8588):  at java.lang.Thread.run(Thread.java:856) 
      04-25 16:43:11.880: E/android.os.Debug(8588): [email protected] > dumpstate -k -t -n -z -d -o /data/log/dumpstate_sys_error 
      04-25 16:43:11.905: I/dumpstate(12661): Check if stand-alone 
      04-25 16:43:11.920: I/dumpstate(12661): begin 
      04-25 16:43:12.045: E/lights(8588): write_int: path /sys/devices/virtual/sec/sec_touchkey/brightness, value 2 
      04-25 16:43:12.045: W/PowerManagerService(8588): Timer 0x7->0x3|0x3 
      04-25 16:43:12.045: I/PowerManagerService(8588): Ulight 7->3|0 
      04-25 16:43:12.045: D/PowerManagerService(8588): setLightBrightness : mButtonLight : 0 
      04-25 16:43:12.055: E/DataRouter(1688): usb connection is true 
      04-25 16:43:12.055: E/DataRouter(1688): DSR is ON. Don't send DTR ON. 
      04-25 16:43:12.900: D/Tethering(8588): sendTetherStateChangedBroadcast 1, 0, 0 

有沒有人有類似的問題?關於發生了什麼的任何線索?

非常感謝

+0

發表logcat,我們需要看到stacktrace 碰撞。 – 2013-04-25 15:36:49

+0

謝謝@StevenByle,請參閱上面的更新1 ... – Devester 2013-04-25 15:57:01

+2

Android SDK中沒有'WifiApManager'。 – CommonsWare 2013-04-25 16:02:25

回答

0

當您使用反射來調用WifiManager的setWifiApConfiguration方法,參數WifiConfigurationSSID不能爲空,否則會導致設立入口一些電話系統,有些電話直接重啓,你會看到logcat中有如下日誌:

java.lang.NullPointerException 
at java.nio.charset.ModifiedUtf8.countBytes(ModifiedUtf8.java:75) 
at java.nio.charset.ModifiedUtf8.encode(ModifiedUtf8.java:119) 
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:197) 
at android.net.wifi.WifiApConfigStore.writeApConfiguration(WifiApConfigStore.java:207) 
at android.net.wifi.WifiApConfigStore.access$400(WifiApConfigStore.java:57) 
at android.net.wifi.WifiApConfigStore$ActiveState$1.run(WifiApConfigStore.java:138) 
at java.lang.Thread.run(Thread.java:848) 
相關問題