जब फ़ोन 2G या 3G में हो, तो मैं TX और RX बाइट्स को अलग-अलग गिनने के लिए निम्नलिखित दो कोडों को कैसे मिला / जोड़ सकता हूँ?

मेरे पास यह पहचानने के लिए निम्न कोड है कि फ़ोन EDGE या UMTS नेटवर्क से कब जुड़ा है जो काम करने लगता है, प्रदर्शन पर एक टोस्ट संदेश दिखा रहा है।

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        PhoneStateListener ConnectionStateListener = new PhoneStateListener() {

            @Override
            public void onDataConnectionStateChanged(int state, int networkType) {
                super.onDataConnectionStateChanged(state, networkType);
                String sState = "";

                switch (networkType) {
                    case TelephonyManager.NETWORK_TYPE_EDGE:   sState = "EDGE (2G)";   break;
                    case TelephonyManager.NETWORK_TYPE_UMTS:   sState = "UMTS (3G)";   break;                    
                }
                Toast.makeText(getApplicationContext(), sState, Toast.LENGTH_SHORT).show();
            }
        };
        telephonyManager.listen(ConnectionStateListener,PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    }
}

इस उदाहरण से Tech रिपब्लिक मुझे यह कोड TX और RX बाइट्स गिनने के लिए मिलता है।

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mStartRX = TrafficStats.getTotalRxBytes();
        mStartTX = TrafficStats.getTotalTxBytes();

        mHandler.postDelayed(mRunnable, 1000);
    }

    //This would be to update the bytes usage every second
    private final Runnable mRunnable = new Runnable() {
        public void run() {
        TextView RX = (TextView)findViewById(R.id.RX);
        TextView TX = (TextView)findViewById(R.id.TX);
        long rxBytes = TrafficStats.getTotalRxBytes()- mStartRX;
        RX.setText(Long.toString(rxBytes));

        long txBytes = TrafficStats.getTotalTxBytes()- mStartTX;
        TX.setText(Long.toString(txBytes));

        mHandler.postDelayed(mRunnable, 1000);
        }
        };
}

शायद कोई इसमें मेरी मदद कर सकता है। किसी भी सलाह/सहायता के लिए अग्रिम धन्यवाद।

4
Ger Cas 30 अगस्त 2019, 23:34

1 उत्तर

सबसे बढ़िया उत्तर

अगर मुझे आपका प्रश्न गलत लगा तो मुझे सुधारें।

आप 2G और 3G डेटा के लिए TX और RX को अलग-अलग गिनना चाहते हैं।

एक ही गतिविधि में आवश्यक कोड कॉपी करें।

एक बूलियन is3G लें और इसे बदलें onDataConnectionStateChanged

फिर ट्रिगर करें mRunnable

telephonyManager.listen(ConnectionStateListener,PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

mHandler.postDelayed(mRunnable, 1000);

mRunnable के अंदर 2G और 3G के लिए अलग-अलग rx/tx बाइट मापें

 if(is3G) {
      rxBytes3G = TrafficStats.getTotalRxBytes() - mStartRX - rxBytes2G;
      txBytes3G = TrafficStats.getTotalTxBytes() - mStartTX - txBytes2G;
  } else {
      rxBytes2G = TrafficStats.getTotalRxBytes() - mStartRX - rxBytes3G;
      txBytes2G  = TrafficStats.getTotalTxBytes() - mStartTX - txBytes3G;
  }

अपना यूआई अपडेट करें

4
shb 8 सितंबर 2019, 07:12