سؤال

أريد ضبط المستمع للاستماع على الحالة اللاسلكية، هل يمكن لأي شخص مساعدتي في الكود الخاص بي

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

...

 TelephonyManager wTelephonyManager;

...

     wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE);
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

// هذا هو الحدث الذي أستخدمه وأريد الاستماع إليه لتغيير شبكة wifi، والكود أعلاه موجود بالكامل في onCreate{}

class PhoneL extends PhoneStateListener

{   






    public void onWifiStateChanged(int state, String nesto)
    {
         mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //mWifi.isConnectedOrConnecting()
             if(mWifi.isConnectedOrConnecting())
             {
                 Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();     
             }
             else
             {
                 Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
             }


    }

}

// هل يمكن لأي شخص أن يساعدني في إنشاء مستمع يستمع إلى حالة wifi ويتحقق مما إذا كان wifi متصلاً أو متصلاً إذا لم يكن الأمر كذلك فأنا أريد تمكين حركة مرور حزم البيانات عبر 3g / 4g

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

المحلول

يطلب نظام أندرويد التبديل إلى Data Traffic متى WiFi غير متصل ولكن هناك مشكلة.
إذا قمت بإيقاف تشغيل WiFi عندما تكون الشاشة مغلقة، فسوف تتغير باستمرار بين شبكة WiFi وشبكة 3G وإذا قمت بتحديد تطبيقات لإرسال البيانات في الخلفية، فسوف تستخدم اتصال البيانات الذي يكون أكثر تكلفة إذا لم يكن لديك خطة بيانات غير محدودة .
هناك مشكلة أخرى وهي أنه عندما تكون في منطقة لا توجد بها إشارة WiFi قوية جدًا، فإنها ستتغير باستمرار إلى Data Traffic وستواجه مشكلات في التصفح أو أي شيء آخر.
المشكلة الثالثة هي البطارية، وفقًا لما سمعته، من الأفضل (من حيث البطارية) استخدام اتصال WiFi بدلاً من البيانات، مع وظيفة إضافية واحدة لا تقم بإيقاف تشغيل WiFi عندما تكون الشاشة مغلقة. (حتى أنني أفعل ذلك) لأن إيقاف تشغيله وتشغيل WiFi هو الأكثر تكلفة (البطارية) التي يجب تشغيلها دائمًا.لذا اترك الأمر لنظام أندرويد.

نصائح أخرى

واجهت هذه المشكلة أيضًا، وإليك كيفية حلها.

في نشاطي onCreate(..) فعلت ذلك

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));

وبالإضافة إلى ذلك قمت بإنشاء العضو "mWifiStateChangedReceiver" بهذه الطريقة

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver()
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        // TODO Auto-generated method stub

        int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);

        switch (extraWifiState)
        {
        case WifiManager.WIFI_STATE_DISABLED:
        case WifiManager.WIFI_STATE_DISABLING:
            enableUI(false);
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
            while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED)
            {
                try
                {
                    Thread.sleep(500);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            update();
            enableUI(true);
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            break;
        case WifiManager.WIFI_STATE_UNKNOWN:
            break;
        }

    }
};

كما ترون، عندما أحصل على WifiManager.WIFI_STATE_ENABLED بالإضافة إلى ذلك، أقوم باختبار ما إذا كانت الشبكة متصلة بالفعل، لأن تمكين شبكة WiFi لا يعني أنها متصلة.على الأقل كان هذا تخميني، ولهذا السبب أنتظر حتى يتم توصيل الشبكة بالفعل.

إذا كنت تريد الاستماع إلى قوة الإشارة يمكنك أيضًا الاستماع إلى:

WifiManager.RSSI_CHANGED_ACTION

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