如何在android中获得上传速度?

pzfprimi  于 2022-12-31  发布在  Android
关注(0)|答案(2)|浏览(477)

我需要在我的安卓应用中根据上传速度做一些操作。这是一个广播应用,我想根据网络上传速度更新分辨率和码率。例如,如果上传速度低于0.5 Mb,我想设置不同的码率和分辨率为360p。如何测量上传速度?
我试过使用连接管理器,但它只给出了整体强度。但不是确切的速度。

mec1mxoz

mec1mxoz1#

我使用以下代码每5秒检查一次下载/上传速度。

import android.net.TrafficStats

object RetrieveData {
    private var totalDownload: Long = 0
    private var totalDownload_n: Long = 0
    private var totalUpload: Long = 0
    private var totalUpload_n: Long = 0
    fun findData(uid: Int): List<Long?> {
        val allData: MutableList<Long?> = ArrayList<Long?>()
        if (totalDownload == 0L) {
            totalDownload = TrafficStats.getUidRxBytes(uid)
        }
        if (totalUpload == 0L) {
            totalUpload = TrafficStats.getUidTxBytes(uid)
        }
        val newTotalDownload = TrafficStats.getUidRxBytes(uid)
        val incDownload = newTotalDownload - totalDownload
        val newTotalUpload = TrafficStats.getUidTxBytes(uid)
        val incUpload = newTotalUpload - totalUpload
        totalDownload = newTotalDownload
        totalUpload = newTotalUpload
        allData.add(incDownload)
        allData.add(incUpload)
        return allData
    }

以及

val timer=fixedRateTimer("ss",false,1000,5000){
                getData()
            }

以及

fun getData() {
        val allData = findData(applicationInfo.uid)
        val mDownload = allData[0]
        val mUpload = allData[1]
        val df = DecimalFormat("#.##")
        var downloadSpeedApi=0
        var uploadSpeedApi=0

        var upSpeed: String = if (mUpload!! < 128) {
            mUpload.toInt().toString() + " B/s"
        } else if (mUpload < 1048576) {
            (mUpload.toInt() / 1024).toString() + " KB/s"
        } else {
            df.format(mUpload.toDouble() / 1048576.0).toString() + " MB/s"
        }

        var downSpeed: String = if (mDownload!! < 128) {
            mDownload.toInt().toString() + " B/s"
        } else if (mDownload < 1048576) {
            (mDownload.toInt() / 1024).toString() + " KB/s"
        } else {
            df.format(mDownload.toDouble() / 1048576.0).toString() + " MB/s"
        }

        Log.d("MyTAG", "$downSpeed, $upSpeed")
nnsrf1az

nnsrf1az2#

有两种方法
1.实现服务器端字节接收报告当大文件上传到服务器时,服务器应该计算每秒接收字节和对客户端的响应,这样您就可以通过简单的计算来计算准确的速度
1.如果您服务器无法报告BYTES_RECEIVED,您可以实现NDK(c++)模块,该模块使用HTTP客户端点对点传输,您可以将字节从java/Kotlin部分发送到ndk,它将计算上一秒的WHOLE_BYTES / TRANSFERED_BYTES,并计算每秒的速度

相关问题