Подтвердить что ты не робот

Лучший способ оценить скорость соединения

Я разрабатываю приложение, которое нужно получить в музыкальном файле, для потоковой передачи в реальном времени.

В песне запроса api я могу указать полосу пропускания (например: 50 кбит/с, 100 кбит/с, 300, 600 или 1 Мбит/с).

Чем больше полоса пропускания, тем больше времени на получение файла будет время. Поскольку я не хочу, чтобы пользователи ограничивались тем, что у меня есть несколько вариантов решения этой проблемы:

  • Обнаруживайте, что телефон использует 3g, wifi или Edge и задает полосу пропускания для каждой скорости соединения.

  • Позвольте пользователю определить качество песни, которую он получит: например, youtube (но пользователи не будут людьми, которые много знают о вычислениях: чем проще программное обеспечение, тем больше он будет соответствовать)

  • Имея способ правильно оценить скорость соединения: например, выборка файла, измерение времени, которое требуется, и установка полосы пропускания.

Я знаю, что скорость соединения может сильно различаться, если пользователь потеряет Wi-Fi или использует 3g на улице. И дело в том, что я не могу изменить полосу пропускания, когда песня будет воспроизводиться.

Возможно, у вас есть опыт в том, что вы хотели бы поделиться?

Спасибо!

4b9b3361

Ответ 2

почему бы не попытаться изменить свое мнение о вещах. Попытайтесь течь со своими пользователями. скажем, ваш пользователь хочет загрузить песню качества 128 Кбит. вы запускаете загрузку, когда вы загружаете, вы делаете среднее время загрузки, занимаете несколько секунд, чтобы этот средний показатель стабилизировался, и если он ниже определенного значения, вы можете всплыть, чтобы сообщить пользователю, что его соединение слишком медленно для текущей пропускной способности и спросить его, если уменьшить качество или медленно загружать.

Это будет:

  • позволяют пользователям всегда предполагать, что они могут получить наилучшее качество.
  • пусть u выполняет проверку во время выполнения и соответственно меняет качество при загрузке без предварительной проверки.
  • поддерживает ваше приложение простым пользователям.

Я знаю, что не отвечаю на ваше конкретное требование, я просто предлагаю другое представление.

Ответ 3

protected String doInBackground(String... urls) {
    String response = "";

    startTime = System.currentTimeMillis();
    for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {

            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();


            BufferedReader buffer = new BufferedReader(
                    new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) {
                response += s;
            }
            endTime = System.currentTimeMillis();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return response;
}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub


    long dataSize = result.length() / 1024;
    takenTime = endTime - startTime;
    long s = takenTime / 1000;
    double speed = dataSize / s;

    Toast.makeText(context, "" + s + "kbps", Toast.LENGTH_SHORT).show();
}

Ответ 4

Определите тип сетевого подключения на Android

Здесь вы можете проверить все доступные опции: http://developer.android.com/reference/android/telephony/TelephonyManager.html

Это может исправить тип мобильной сети, но не может помочь вам со скоростью Wi-Fi, вы должны закодировать его, загрузив что-то с сервера, который вам известен, и вычислите время.

Надеюсь, это поможет.