سؤال

وهذا ما أود القيام به:

و=> إذا تم تمكين واي فاي ونشطة، وإطلاق نية (في الواقع انها عرض ويب الذي يحصل مضمونه => تعليمات التطبيق الخاص بي على شبكة الإنترنت)

و=> IF NOT، ثم أود أن إطلاق النية آخر بحيث لا تظهر عرض ويب مع "صفحة ويب غير متوفرة ... صفحة ويب في <لأ href =" http://www.mywebsite.com "يختلط =" noreferrer "> http://www.mywebsite.com قد يكون مؤقتا أو قد يكون تم نقلها ..."

وأنا ديللينكوفر في البداية لاستخدام

وإذا (wifi.isWifiEnabled ())

ولكن هذا لا نقول إذا كان الاتصال واي فاي نشط أم لا. إلا أنها تقول أن المستخدم قد تحول التبديل على. الجهاز قد أو قد لا تكون مرتبطة ... هل هذا صحيح؟

وبعد ذلك حاولت استخدام:

وإذا (wifi.getConnectionInfo (). getSSID ()! = فارغة)

ولكن لاحظت أن تقوم بإرجاع سلسلة حتى إذا تم فقدان الاتصال أو تم تعطيل ...؟

وكيف يجب أن أفعل بعد ذلك؟

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
Intent intent_instructions;

            if (wifi.getConnectionInfo().getSSID()!= null){
                Log.i("Hub", "WiFi is enabled AND active !");
                Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID());
                intent_instructions = new Intent(this, Instructions.class);
            }else{
                Log.i("Hub", "NO WiFi");
                intent_instructions = new Intent(this, Instructions_No_WiFi.class);
            }
            this.startActivity(intent_instructions);

هل هناك طريقة أكثر عمومية لاختبار ما إذا كان الجهاز لديه اتصال بالإنترنت قبل إطلاق نية؟ سواء كان ذلك من خلال واي فاي، 3G، الخ ...

وشكرا مقدما لمساعدتكم.

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

المحلول

ويمكنك استخدام التعليمات البرمجية التالية للتحقق من الاتصال:

private static boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo =
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    }
    return networkInfo == null ? false : networkInfo.isConnected();
}

يرجى التأكد من أن كنت قد سجلت نية android.net.conn.CONNECTIVITY_CHANGE في المانيفستو الخاص بك، وإلا، فلن تتلقى إشعارا بأنك على الانترنت.

ولقد كنت تناضل مع هذه القضية لاليومين الماضيين وأنا فقط أدركت الآن أنني بحاجة إلى تسجيل CONNECTIVITY_CHANGE وليس فقط WIFI_STATE_CHANGED.

نصائح أخرى

وحاول android.net.ConnectivityManager.getActiveNetworkInfo(): اذا عاد null لديك أي اتصال. إذا كان بإرجاع كائن NetworkInfo، يمكنك التحقق من حالة الاتصال مع NetworkInfo.getState()، واذا كان NetworkInfo.State.CONNECTED ثم كنت متصلا، وإلا كنت لا.

ويمكنك القيام بذلك على النحو التالي:

  @Override
  public void onReceive(Context context, Intent intent) {

  String action = intent.getAction();

        if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){

         Log.d("WIFI", "WIFI has changed");
         int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
         Log.d("WIFI", "WIFI State = " + wifiState);
         setCurrentWifiState(wifiState);

         }  

وسوف تحصل 0،1،2،3 اعتمادا على الدولة وواي فاي في، وذلك على سبيل المثال 2 يتم الاتصال، يمكنك التحقق من بقية في الوثائق

في الدرجة BroadcastReceiver الخاص بك:

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){                
        boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
        if (connected){
            // start your service here
        }
    }                   
}

وفي ملف AndroidManifest.xml تأكد من تسجيل في بث نية android.net.wifi.supplicant.CONNECTION_CHANGE.

<intent-filter >    
    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
</intent-filter>

وisConnected() لا يعمل موافق تماما، والبحوث شيء آخر

final ConnectivityManager connMgr = (ConnectivityManager)
        this.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi =
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile =
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){
        Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
    }
    else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){
        Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
    }
    else
    {   
        Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
    }

وهذا الاختيار كود إذا كنت مع واي فاي أو الجيل الثالث 3G أو لا شيء، في حالة من واي فاي على ولكن لا علاقة لشبكة الجيل الثالث 3G أو لديك مشكلة إشارة أن الكشف عن هذا التفاصيل، مع DetailedStates

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