Как собрать сетевой трафик c веб-просмотра в Android? - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю приложение SpeedTest в android. Одной из частей этого приложения является тест просмотра, ie., Загрузка различных веб-страниц в веб-представление и вычисление времени и рейтинга производительности. Я разобрался с частью времени. Но для того, чтобы рассчитать PR, мне нужно знать данные, используемые при загрузке каждого сайта. Я разобрался с частью времени. Любые идеи о том, как рассчитать используемые данные? В настоящее время я использую getUidRxBytes (), но это не работает, поскольку он дает мне весь сетевой трафик c с момента загрузки.

Это код

public class  BrowsingTestFragment extends Fragment {
View rootView;
WebView myWebView;
Button start;
boolean startTesting;
String[] mStrings;
private int i = 0;
long last_page_start;
long now;
long exactTime;
TextView time1, time2, time3, time4, time5,weight1,weight2,weight3,weight4,weight5;
Handler handler;
Runnable webUpdater = null;
BrowsingTestFragment context;
String[] testArray = new String[5];
int j=0; int foo;
String s;
double kb;
String dataReceived;


public BrowsingTestFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.fragment_browsingtest, container, false);
    myWebView = new WebView(getContext());
    myWebView = rootView.findViewById(R.id.webview);
    mStrings = new String[]{
            "https://www.google.com",
            "https://www.facebook.com",
            "https://www.twitter.com",
            "https://www.wikipedia.org",
            "https://www.linkedin.com"
    };

    time1 = rootView.findViewById(R.id.textView);
    time2 = rootView.findViewById(R.id.textView5);
    time3 = rootView.findViewById(R.id.textView8);
    time4 = rootView.findViewById(R.id.textView11);
    time5 = rootView.findViewById(R.id.textView14);
    weight1=rootView.findViewById(R.id.textView4);
    start = rootView.findViewById(R.id.button);
    weight1 = rootView.findViewById(R.id.textView4);
    weight2= rootView.findViewById(R.id.textView7);
    weight3= rootView.findViewById(R.id.textView10);
    weight4= rootView.findViewById(R.id.textView13);
    weight5= rootView.findViewById(R.id.textView16);

    startTesting = false;
    myWebView.clearCache(true);
    myWebView.clearHistory();
    myWebView.setVisibility(View.INVISIBLE);
    start.setVisibility(View.VISIBLE);
    myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    myWebView.getSettings().setSaveFormData(false);

    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            time1.setText(R.string.defaultString);
            time2.setText(R.string.defaultString);
            time3.setText(R.string.defaultString);
            time4.setText(R.string.defaultString);
            time5.setText(R.string.defaultString);
            weight1.setText(R.string.defaultString);
            weight2.setText(R.string.defaultString);
            weight3.setText(R.string.defaultString);
            weight4.setText(R.string.defaultString);
            weight5.setText(R.string.defaultString);
            last_page_start = now = exactTime = 0;
            myWebView.clearCache(true);
            myWebView.clearHistory();
            myWebView.getSettings().setJavaScriptEnabled(true);
            myWebView.setHorizontalScrollBarEnabled(false);
            myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
            myWebView.getSettings().setSaveFormData(false);
            myWebView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    return true;
                }
            });
            if (!startTesting) {
                i = 0;
                startTesting = true;
                myWebView.setVisibility(View.VISIBLE);
                start.setVisibility(View.INVISIBLE);
                startLoadURLs();
            } else {
                startTesting = false;
                myWebView.setVisibility(View.INVISIBLE);
                start.setVisibility(View.VISIBLE);
            }
        }
    });

    myWebView.setWebChromeClient(new MyWebChromeClient(this));

    myWebView.setWebViewClient(new WebViewClient() {
        boolean redirect = false;

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

            dataReceived=null;
            dataReceived=String.valueOf(TrafficStats.getUidRxBytes(android.os.Process.myUid()));
            foo= Integer.parseInt(dataReceived);
            kb= Math.round(((double) foo/8192)*.9);
            s=String.valueOf(kb);
            testArray[j]=s;
            j++;

            Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
            if (redirect == false)
                last_page_start = System.nanoTime();
            Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            now = System.nanoTime();
            Log.i("onPageFinishedurl", "onPageFinished now" + now);

        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
            Log.i("onReceivedErrorurl", "onReceivedError");
            now = last_page_start;
        }
    });


    return rootView;
}

private void startLoadURLs() {

    MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    myWebView.loadUrl(mStrings[i]);
    Log.i("mStringsurl", "mStrings" + mStrings[i]);
    handler = new Handler();
    webUpdater = new Runnable() {

        @Override
        public void run() {
            exactTime = now - last_page_start;
            Log.i("exactTimeurl", "exactTime" + exactTime);
            double elapsedTimeInSecond = Math.round(((double) exactTime / 1000000000) * 100.0) / 100.0;
            Log.i("elapsedTimeInSecondurl", "elapsedTimeInSecond" + elapsedTimeInSecond);
            if (i == 0) {
                time1.setText("" + elapsedTimeInSecond + " s");
                weight1.setText(testArray[0]+"kiB");
            } else if (i == 1) {
                time2.setText("" + elapsedTimeInSecond + " s");
                weight2.setText(testArray[1]+"kiB");
            } else if (i == 2) {
                time3.setText("" + elapsedTimeInSecond + " s");
                weight3.setText(testArray[2]+"kiB");
            } else if (i == 3) {
                time4.setText("" + elapsedTimeInSecond + " s");
                weight4.setText(testArray[3]+"kiB");
            } else if (i == 4) {
                time5.setText("" + elapsedTimeInSecond + " s");
                weight5.setText(testArray[4]+"kiB");
            }
            ++i;
            if (i < mStrings.length) {
                myWebView.clearCache(true);
                myWebView.clearHistory();
                myWebView.clearFormData();
                myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
                myWebView.getSettings().setSaveFormData(false);
                startLoadURLs();
            } else {
                handler.removeCallbacks(webUpdater);
                startTesting = false;
                myWebView.clearCache(true);
                myWebView.clearHistory();
                myWebView.clearFormData();
                myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
                myWebView.getSettings().setSaveFormData(false);
                myWebView.setVisibility(View.INVISIBLE);
                start.setVisibility(View.VISIBLE);
                MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
            }
        }
    };
    handler.postDelayed(webUpdater, 5000); // 5 seconds

}

private class MyWebChromeClient extends WebChromeClient {


    public MyWebChromeClient(BrowsingTestFragment browsingTestFragment) {
        super();
        context = browsingTestFragment;
    }
}

@Override
public void onStop() {
    super.onStop();

    try {
        if (startTesting) {
            handler.removeCallbacks(webUpdater);
            startTesting = false;
            myWebView.clearCache(true);
            myWebView.clearHistory();
            myWebView.clearFormData();
            myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
            myWebView.getSettings().setSaveFormData(false);
            myWebView.setVisibility(View.INVISIBLE);
            start.setVisibility(View.VISIBLE);
            MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
            Toast.makeText(getContext(), "Testting is terminatted", Toast.LENGTH_SHORT).show();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
   }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...