web-dev-qa-db-ja.com

接続速度を評価する最良の方法

ライブで再生するには、ストリーミングで音楽ファイルを取得する必要があるアプリを開発しています。

Request song apiで帯域幅を指定できます(例:50kbps、100kbps、300、600、または1 M​​bps)。

帯域幅が大きいほど、ファイルを取得する時間が長くなります。ユーザーに制限されることを望まないので、対処するための複数の選択肢があります。

  • 電話が3g、wifi、またはEdgeを使用しているかどうかを検出し、各接続速度の帯域幅を指定します。

  • 取得する曲の品質をユーザーに決定させます:youtubeのように(ただし、ユーザーはコンピューティングについて多くのことを知っている人にはなりません。ソフトウェアが簡単であればあるほど、よりフィットします)

  • 接続速度を適切に評価する方法がある:ファイルを取得するように、かかった時間を測定し、帯域幅を設定します。

ユーザーがWi-Fiを失ったり、路上を移動する3gを使用していたり​​すると、接続速度が大きく変化することがあります。そして問題は、曲の再生時に帯域幅を変更できないことです。

たぶんあなたはあなたが共有したいことについての経験を持っていますか?

ありがとうございました!

34
jDourlens

Facebookはこのためのライブラリをリリースしました。

https://github.com/facebook/network-connection-class

これは2011年には存在しませんでした。

41
jDourlens
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

物事に対する見方を変えてみませんか。ユーザーと一緒に流れるようにしてください。ユーザーが128 kbit品質の曲をダウンロードしたいとします。ダウンロードを開始しますが、ダウンロード中に平均ダウンロード時間を作り、この平均が安定するまで数秒かかり、それが特定の値を下回っている場合は、ポップアップを表示して、ユーザーの接続が現在の帯域幅に対して遅すぎることを伝え、尋ねます品質を落とすか、ダウンロードをゆっくり続けるかどうか。

この意志:

  1. ユーザーに常に最高品質のメディアを入手できると想定するオプションを提供します。
  2. 実行時にチェックを行い、事前にチェックする必要なしにダウンロード中に品質を変更します。
  3. ユーザーにとってアプリをシンプルに保ちます。

私はあなたの特定の要件に答えていないことを知っている、私はただ別のビューを提供しています。

4
codeScriber

Androidでのネットワーク接続タイプの検出

ここで利用可能なすべてのオプションを確認できます: http://developer.Android.com/reference/Android/telephony/TelephonyManager.html

これにより、モバイルネットワークの種類を修正できますが、Wifiの速度を向上させることはできません。既知のサーバーから何かをダウンロードして時間を計算し、コーディングする必要があります。

役に立てば幸いです。

2
atzu