آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چرا NetworkInfo isConnected() همیشه بدرستی کار نمی کنه؟

پاشا  11 سال پیش  11 سال پیش
0 0

سلام

چرا NetworkInfo isConnected() همیشه بدرستی کار نمی کنه؟ در اندروید 2.3

بعضی وقتا TRUE بر می گردونه بعضی وقتا هم FALSE... در صورتی که به اینترنت وصل هستم و InternetBrowers ها هم کار می کنند.

این تابع منه:

// android.permission.ACCESS_NETWORK_STATE permission required.
public final static boolean isNetworkAvailable(final Context ACTIVITY_CONTEXT)
{
final ConnectivityManager _OBJ_CM = (ConnectivityManager) ACTIVITY_CONTEXT.getSystemService("connectivity");

if (_OBJ_CM != null)
{
final NetworkInfo _ARY_NI = _OBJ_CM.getActiveNetworkInfo();
if (_ARY_NI != null)
{
if (((_ARY_NI.getType() == ConnectivityManager.TYPE_WIFI) || (_ARY_NI.getType() == ConnectivityManager.TYPE_MOBILE)) && _ARY_NI.isConnected()) return true;
}
}

return false;
}
0 0
با اضافه کردن این در جای مناسبی از ین تابع (((WifiManager)ACTIVITY_CONTEXT.getSystemService("wifi")).getWifiState() == 3) حل شد (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
0 0

این رو تست کن :

public static boolean isNetworkAvailable(Context context){
           
            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = connectivity.getActiveNetworkInfo();
            boolean isConnected = info != null && info.isConnectedOrConnecting();
           
            if(isConnected){
                if(info.getTypeName().equals("WIFI") || info.getTypeName().equals("wifi")){
                    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                    if (wifiInfo != null) {
                        Integer linkSpeed = wifiInfo.getLinkSpeed();
                        if(linkSpeed>0){
                            Log.i("link speed",""+linkSpeed);
                            return true;
                        }
                        else {
                            return false;
                        }
                    }
                }
                if(info.getTypeName().equals("MOBILE") || info.getTypeName().equals("mobile")){
                    return true;
                }
                if(info.getTypeName().equals("ETHERNET") || info.getTypeName().equals("ethernet")){
                    return true;
                }
                if(info.getTypeName().equals("BLUETOOTH") || info.getTypeName().equals("bluetooth")){
                    return true;
                }
            }
            return false;
        }
پاسخ به سوال 
پاشا  11 سال پیش
+2 0

مرسی ولی تابع شما هم جواب نداد. اما جسارتاً:

شاید بد نباشه اگر از تابع من کمی الگو بگیری چون تابع شما ایرادات جدی داره و باید تصحیح و کمی هم بهینه سازی بشه.

1- متغیر connectivity رو داخل شرط بزارید و مطمعن بشید که NULL نیست (چون تضمینی نیست که ConnectivityManager دستگاه از نظر نرم افزاری و سخت افزاری بدون مشکل باشه یا 100% return بشه).

2- طبق گفته گوگل، برای چک کردن ارتباط وصل شده باید بجای متد isConnectedOrConnecting از isConnected استفاده کنید، چرا که Connecting یعنی هنوز وصل نشده ولی درحال وصل شدن هست (شاید امروز وصل شه شاید 1 ماه دیگه شایدم هیچ وقت! بخاطر مشکلات شبکه)

isConnectedOrConnecting: Indicates whether network connectivity ... being established.
... call isConnected() instead, which guarantees that the network is FULLY USABLE.

3- اگر منظور از این تابع چک کردن ارتباط اینترنتی هستش، پس باید گزینه های ETHERNET  و BLUETOOTH رو حذف کنید.

و در آخر می تونید بعضی از اون شروط که return یکسانی دارند رو یکی کنید تا کد کمی بهینه تر و خلاصه تر بشه.

+1 0
یه سوزن هم به خودتون بزنیم D: این چه وضعه نام گزاری متغیره؟ _OBJ_CM (11 سال پیش)
+1 0
100%. ولی من چون game-engine هم توسعه میدم(نه به صورت حرفه ای) دیگه اونجا 100 خط 1000 خط کد درکار نیست بلکه حرف از 50 هزار خط کده، بنابراین تقسیم بندی های ریزتر و نامگذاری های طویل میاد وسط... خب منم عادت کردم. که البته در جاوا همچین هم بد نیست :) (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .