سؤال

لقد كتبت بعض البرامج التي تستخدم WiFi كوسيلة محتملة لاتصال الإنترنت .. لقد لاحظت أنه بعد بعض الوقت (أظن أن 15-20 دقيقة) بعد أن دخل الجهاز في وضع حفظ الطاقة (على أي حال عندما يكون أصبحت الشاشة سوداء) سيتم إسقاط اتصال WiFi ببساطة ، على الرغم من أنه لا يزال يتم استخدامه :( هذا على ADP 2 (وبالتالي فإن Google Ion مع Android 1.6) ... تمكنت من الحصول على السجل التالي:

06-10 15:04:27.009: DEBUG/WifiService(72): got ACTION_DEVICE_IDLE
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: ERROR/wpa_supplicant(538): Set_key: Wrong Key
06-10 15:04:27.069: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-STATE-CHANGE id=0 state=8]
06-10 15:04:27.079: VERBOSE/WifiStateTracker(72): Changing supplicant state: COMPLETED ==> DORMANT
06-10 15:04:27.079: DEBUG/WifiStateTracker(72): Deconfiguring interface and stopping DHCP
06-10 15:04:27.099: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys]
06-10 15:04:27.099: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=8]
06-10 15:04:27.139: WARN/Smack/Packet(169): notify conn break (IOEx), close connection
06-10 15:04:27.139: DEBUG/Smack(169): [XMPPConn] close connection, notifyClosed=false
06-10 15:04:27.139: ERROR/MediaPlayer(390): error (1, -17)
06-10 15:04:27.139: ERROR/MediaPlayer(390): Error (1,-17)
06-10 15:04:28.109: VERBOSE/WifiMonitor(72): Event [CTRL-EVENT-DRIVER-STATE STOPPED]
06-10 15:04:28.129: VERBOSE/WifiStateTracker(72): New network state is DISCONNECTED
06-10 15:04:28.129: VERBOSE/WifiStateTracker(72): Changing supplicant state: DORMANT ==> DORMANT
06-10 15:04:28.189: INFO/MediaUploader(199): No need to wake up
06-10 15:04:28.189: DEBUG/GpsLocationProvider(72): updateNetworkState available
06-10 15:04:28.189: DEBUG/GpsLocationProvider(72): NetworkThread wait for 4484259ms
06-10 15:04:28.289: DEBUG/NetworkLocationProvider(72): onDataConnectionStateChanged 3
06-10 15:04:28.299: DEBUG/GpsLocationProvider(72): state: CONNECTING apnName: iinternet reason: null
06-10 15:04:32.979: DEBUG/NetworkLocationProvider(72): onDataConnectionStateChanged 3
06-10 15:04:33.029: DEBUG/GpsLocationProvider(72): state: CONNECTED apnName: iinternet reason: null
06-10 15:04:33.099: DEBUG/GpsLocationProvider(72): updateNetworkState available
06-10 15:04:33.099: DEBUG/GpsLocationProvider(72): NetworkThread wait for 4479355ms
06-10 15:04:33.129: INFO/MediaUploader(199): No need to wake up
06-10 15:04:33.299: INFO/ActivityManager(72): Stopping service: com.android.mms/.transaction.TransactionService
06-10 15:04:33.339: ERROR/TransactionSettings(156): Invalid APN setting: MMSC is empty
06-10 15:04:33.419: INFO/ActivityManager(72): Stopping service: com.android.providers.downloads/.DownloadService
06-10 15:04:38.309: DEBUG/dalvikvm(199): GC freed 301 objects / 19232 bytes in 92ms
06-10 15:04:43.349: DEBUG/dalvikvm(216): GC freed 1430 objects / 84920 bytes in 121ms
06-10 15:04:48.319: DEBUG/dalvikvm(156): GC freed 323 objects / 15152 bytes in 96ms

هل هذا نوع من الأخطاء/الميزة المعروفة؟ إذا كان الأمر كذلك ، كيف تتجول؟ هل هناك أيضًا ما يعرض هذا الحدث فعليًا ثم تجاهله Soimehow أو إعادة وضع اتصال WiFi؟ شكرا لك مقدما

هل كانت مفيدة؟

المحلول

تحتاج إلى إنشاء قفل wifi. هنا كيف تفعلها:

WifiManager wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiLock lock = wifimanager.createWifiLock("my_lock");

lock.acquire();

// your code here

lock.release();

لاحظ أنه يجب عليك فقط إنشاء قفل WiFi عند استخدام WiFi بنشاط (أي تنزيل ملف كبير) ، وإلا فإنك ستؤثر دون داع على عمر البطارية.

نصائح أخرى

أحصل على SecurityException عندما أتصل بـ wifilock.acquire (). هل أفتقد استخدام الاستخدامات في بيواضي أم أن هناك شيئًا أحتاجه للتحقق مسبقًا في التعليمات البرمجية؟ أفترض أن الأمر يتعلق بالإعدادات المتقدمة في صفحة إعدادات WiFi التي تم تعيينها على الإطلاق.

الحصول على قفل Wi-Fi ليس الحل المفضل لهذا. تتمثل نية قفل Wi-Fi في الاحتفاظ بها فقط عندما تصل بنشاط إلى الشبكة ، أي تنزيل ملف. على سبيل المثال Skype و Google Hangout لا يأخذان ويحتفظان بقفل Wi-Fi. من المفترض أن تفعل ما قاله مارتن مولنار في تعليقه أعلاه. من المفترض أن تدع المستخدم يقرر ما إذا كان يريد السماح لجهازه (وتطبيقك على جهازه) بالبقاء على اتصال بشبكة Wi-Fi عندما تكون الشاشة مطفأة عبر إعداد "WiFi Awake أثناء النوم". إذا أصرت تمامًا على أن التطبيق الخاص بك يجب أن يحافظ على Wi-Fi حتى 15 دقيقة بعد أن يتم إيقاف الشاشة ، حتى لو قام المستخدم بتعيين "WiFi مستيقظًا أثناء النوم" إلى "لا" ، فمن المفترض أن تأخذ قفل الاستيقاظ الجزئي. مرة أخرى ، لا يأخذ سكايب قفل الاستيقاظ الجزئي.

إذا كنت ترغب حقًا في الحصول على تطبيق Slick يمكنه تلقي البيانات/الإخطارات بشكل غير متزامن ، فيجب عليك إعداد إشعارات الدفع GCM.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top