2016-03-09 2 views
0

Как я могу проверить уровень сетевого сигнала перед выполнением AsyncTask.Android: проверьте уровень сетевого сигнала перед выполнением asynctask

Например, если на телефоне пользователя нет доступа к Интернету или нестабильному соединению, должен появиться тост, уведомляющий пользователя о том, что у него слабое соединение. И если телефон пользователя имеет сильное или стабильное соединение, будет выполняться asynctask.

PS.

, что я говорю о том, как этот вид AsyncTask

class AttemptGetData extends AsyncTask<String, String, String>{ 
     String ID = att_id.toString(); 
     String Stud_id = stud_no.toString(); 
     String remarks = RadioAttBtn.getText().toString(); 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(AddStudentAttendance.this); 
      pDialog.setMessage("In Progress..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      List<NameValuePair> mList = new ArrayList<NameValuePair>(); 
      mList.add(new BasicNameValuePair("att_list_id", ID)); 
      mList.add(new BasicNameValuePair("student_no", Stud_id)); 
      mList.add(new BasicNameValuePair("remark", remarks)); 

      Log.d("starting", "fetch"); 

      JSONObject json = jsonParser.makeHttpRequest(url1, "POST", mList); 

      try { 
       verify = json.getString("Message"); 
       return verify; 
      }catch (JSONException e){ 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      pDialog.dismiss(); 
      if (s != null){ 
       Toast.makeText(getApplicationContext(), verify, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

ответ

1
WifiManager wifiManger= (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
// in Activity replace getActivity() by Context in above line 
WifiInfo wifiInfo = wifiManger.getConnectionInfo(); 
int speedMbps = wifiInfo.getLinkSpeed(); 
int myspeed=2000; //mention your speed 
if(speedMbps>2000) 
{ 
    // start AsyncTask 
} 
else 
{ 
// your Toast message for weak connection 
} 
+0

привет сэр Я нахожу ваш ответ интересным, но я думаю, что мне также нужен код для wifiManager – CallMeJeo

+0

проверить мой отредактированный ответ – sasikumar

+0

о, я почти забыл сэр его не только в Wi-Fi, но с мобильными данными также – CallMeJeo

1

Я хотел бы предложить вам создать IntentService, который выполняется периодически и подключается к известному URL как httpbin.org. ConnectivityManager расскажет вам, связано ли устройство с Wi-Fi или мобильными данными, но это не скажет вам, есть ли у вас фактическое использование интернет-соединения.

import android.app.IntentService; 
import android.content.Intent; 

import com.squareup.otto.Bus; 

import java.io.IOException; 

import chat.example.app.App; 
import chat.example.app.events.NetworkStatusEvent; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.Response; 

/** 
* IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. 
* Our app uses this service to find out if we have internet connection or not. 
* 
* Why do we prefer this approach over using ConnectivityManager? 
* This is because having an active network interface doesn't guarantee that a particular networked 
* service is available. Network issues, server downtime, low signal, captive portals, content filters 
* and the like can all prevent your app from reaching a server. 
* For instance you can't tell for sure if your app can reach Twitter until you receive a valid response 
* from the Twitter service. 
* Source: http://stackoverflow.com/questions/4238921/detect-whether-there-is-an-internet-connection-available-on-android 
* 
* We will use https://httpbin.org/ to check for network connectivity 
* httpbin(1): HTTP Request & Response Service 
* 
*/ 
public class NetworkStatusService extends IntentService{ 
    private static final String url = "https://httpbin.org/ip"; 
    private static final String TAG = "NetworkStatusService"; 
    //---------------------------------------------------------------------------------------------- 
    public NetworkStatusService(){ 
     super(TAG); 
    } 
    //---------------------------------------------------------------------------------------------- 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     Logger.d(TAG,"NetworkStatusService Invoked"); 
     Bus bus = App.getInstance().getEventBus(); 
     bus.register(this); 
     NetworkStatusEvent status = new NetworkStatusEvent(); 
     try{ 
      if(makeRequest().isSuccessful()){ 
       Logger.d(TAG,"Network Available"); 
       status.isAvailable = true; 
       bus.post(status); 
      }else{ 
       Logger.d(TAG,"Network Unavailable"); 
       status.isAvailable = false; 
       bus.post(status); 
      } 
     }catch(IOException e){ 
      Logger.d(TAG,"Network Unavailable"); 
      bus.post(status); 
     }finally{ 
      bus.unregister(this); 
     } 
    } 
    //---------------------------------------------------------------------------------------------- 
    private Response makeRequest() throws IOException { 
     OkHttpClient client = App.getInstance().getOkHttpClient(); 
     Request request = new Request.Builder() 
       .url(url) 
       .build(); 
     return client.newCall(request).execute(); 
    } 
    //---------------------------------------------------------------------------------------------- 
} 

Это мой код с использованием автобусной шины Otto и интернет-библиотеки OkHttp.

+0

привет, сэр, это будет полезно Если я использую этот код? то, что я пытаюсь выполнить, - это проверка уровня сигнала в интернет-соединении как с Wi-Fi, так и с мобильными данными. после проверки сигнала, если соединение слишком медленно, он не выполнит асинтекс – CallMeJeo

+0

@CallMeJeo Будет ли это полезно? Зависит от вашего варианта использования. Всякий раз, когда пользователь хочет выполнить асинтезу, запустите эту службу и дождитесь события. Если есть сеть, выполняется асинхронная задача. Если нет, отобразите тост или что-то еще –

+0

oh see. это может работать, но без обид сэр это не то, что я пытаюсь выполнить. как я уже упоминал ранее, приложение должно проверить уровень сигнала, если он слабый или сильный, не только проверяет наличие интернет-соединения. – CallMeJeo