エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のデータセンサー API でデータの使用を調整する方法

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

ユーザーがデータ通信量上限に近づいたらデータの使用量を減らしたり、ユーザーが制限を超えたらデータの使用を中断したり、または Wi-Fi 接続が使用可能になるまでデータを転送するタスクを延期したりするようにアプリのコードを記述できます。

ユーザーはデータ センサー機能を使用して、データ計画の制限を指定できます。その後、データ センサーはユーザー指定の制限に対してデータ使用量を監視します。アプリはこの情報に基づいてユーザーのデータ使用量を調整してコストの節減を図ることができます。

重要:重要:

データ センサー アプリとタイルを電話にインストールするのは、モバイル オペレーターが選択できます。そのため、アプリのユーザーの電話にデータ センサー アプリが存在しない場合があります。アプリがない場合は、ユーザーはデータ通信量上限を入力できません。

ユーザーのデータ通信量上限が不明な場合でも、データ センサー API を使用してユーザーが Wi-Fi 接続を使用しているか、またはローミングしているかを判断できます。ただし、データ センサー API を使用して、ユーザーがデータ通信量上限に近づきつつあるか、またはデータ通信量上限を超えているかを判断することはできません。

このトピックは、次のセクションで構成されています。

データ センサー API を使用するアプリには、ID_CAP_NETWORKING 機能が必要です。この必要条件は、アプリのマニフェスト ファイルで指定します。詳細については、「Windows Phone 8 のアプリ機能とハードウェア要件」を参照してください。

次のタイミングで、アプリ内のユーザーのデータ使用量を確認するようにアプリを設計します:

  1. アプリの起動時。つまり、Launching イベントが発生するタイミング。

  2. NetworkInformation.NetworkStatusChanged イベントが発生するタイミング。このイベントは、次の条件で発生します。

    • 携帯電話と Wi-Fi の間で接続の種類が変わったとき。

    • ユーザーがローミング状態に入ったとき、またはローミング状態から抜けたとき。

    • ApproachingDataLimit または OverDataLimittrue になったとき。

  3. 非アクティブ化または廃棄による一時停止の後にアプリが再アクティブ化されたとき。つまり、Activated イベントが発生するタイミング。

  4. オプションで、大量のデータを転送する時間のかかる操作の前。

通常は、Windows.Networking.Connectivity 名前空間の次のクラス、メソッド、およびプロパティを使用して、アプリがデータ使用を削減、中断、または延期すべきかどうかを判断します。このトピックのコード例は、これらのオブジェクトを使用する方法を示しています。

  1. NetworkInformation クラスの静的 GetInternetConnectionProfile メソッドを呼び出すことにより、ConnectionProfile を取得します。

  2. 現在の ConnectionProfile に関連付けられた NetworkAdapterIanaInterfaceType プロパティを確認します。

    電話が無料の Wi-Fi 接続を使用している場合は、アプリでデータ使用量を制限する必要はありません。それ以外の場合は、次の手順に進みます。

  3. GetConnectionCost メソッドを呼び出して、現在の ConnectionProfile クラスに関連付けられている ConnectionCost クラスの NetworkCostType プロパティを確認します。使用可能な値は、次に示すとおり、NetworkCostType 列挙体のメンバーです:

    • 不明

    • 制限なし

    • 固定

    • 変数

    ユーザーのデータ通信量上限が Unrestricted (無制限) の場合は、アプリによってデータ使用量を制限する必要はありません。それ以外の場合は、次の手順に進みます。

  4. 現在の ConnectionProfile クラスに関連付けられた ConnectionCost クラスの他の 3 つのプロパティを確認して、次のプロパティのいずれかがユーザーのデータ通信量上限に関して true であるかどうかを判断します。

    これらの値のいずれかが true である場合は、アプリがデータ使用量を削減するか、またはなくすことができます。

    ユーザーがまだデータ通信量上限を指定してなくて、NetworkCostTypeUnknown の場合は、ApproachingDataLimitOverDataLimit の値は false になります。データ使用のコストが不明な場合は、アプリの最適な動作を選択する必要があります。

    NetworkCostTypeUnknown の場合でも、Roaming プロパティは正確な値を返します。

次の表は、ユーザーのデータ コストを削減するためにアプリがどのようにデータ使用量を調整できるかについての推奨事項を一覧にしています。

NetworkCostType

ConnectionCost

責任のあるデータ使用

制限なし

適用できません。

制約はありません。

高解像度ビデオをストリーム配信します。

高解像度画像をダウンロードします。

電子メールの添付データを取得します。

固定または可変

次の 3 つのプロパティはすべて false です。

制約はありません。

高解像度ビデオをストリーム配信します。

高解像度画像をダウンロードします。

電子メールの添付データを取得します。

固定または可変

または

不明

NetworkCostTypeFixed または Variable の場合、ApproachingDataLimittrue です。

NetworkCostTypeUnknown の場合は適用できません。

少量のデータを転送する。

オーバーライドのオプションを提供します。

低品質のビデオをストリーム転送する。

低解像度の画像をダウンロードする。

電子メール ヘッダーのみを取得する。

データを転送するタスクを延期します。

固定または可変

OverDataLimitまたは Roamingtrue です。

データを転送しない。

オーバーライドのオプションを提供します。

ビデオのダウンロードを停止する。

画像のダウンロードを停止する。

電子メールを取得しない。

データを転送するタスクを延期します。

データの使用を削減、中断または延期するようにアプリを記述する場合は、ここに推奨した削減された使用レベルを無効にするオプションをユーザーに提供することをお勧めします。ただし、繰り返しプロンプトが表示されるのは最良の方法ではありません。ユーザーの中断を最小限に抑えるために、繰り返されるプロンプトを回避するオプションをユーザーに提供するアプリレベルの設定を作成できます。たとえば、次の有効な値を持つ Prompt to override reduced data usage 設定を作成できます:Always overridePrompt to override、および Never override

メモメモ:

携帯電話から Wi-Fi へ、またはその逆へネットワークの種類を変更してデータ センサー コードをテストするのに、シミュレーション ダッシュボードは使用できません。シミュレーション ダッシュボードは、ここで説明している、データ センサー API が使用するプロパティの値を変更しません。シミュレーション ダッシュボードでのネットワーク シミュレーションの詳細については、「Windows Phone で低帯域幅接続やシグナル不良をシミュレートする方法」を参照してください。

電話が接続情報を持っている Wi-Fi 接続が使用可能になった場合は、電話は自動的に携帯電話接続から Wi-Fi 接続に切り替わります。Wi-Fi 接続が使用可能になったときに、いったん切断し再接続するためのコードを記述する必要はありません。

次のコード例は、ユーザー指定のデータ通信量上限に基づいてデータ使用量を調整する方法を示しています。


using Windows.Networking.Connectivity;
…

namespace DataSenseSample
{
    public partial class MainPage : PhoneApplicationPage
    {

        bool m_bDoNotSendData = false;
        bool m_bSendLowResolutionImage = false;

        private const int IANA_INTERFACE_TYPE_WIFI = 71;

        NetworkStatusChangedEventHandler networkStatusCallback;

        // Constructor.
        public MainPage()
        {
            InitializeComponent();

            // Handle the NetworkStatusChanged event.
            networkStatusCallback = new NetworkStatusChangedEventHandler(OnNetworkStatusChange);
            UpdateNetworkInformation();

        }

        void UpdateNetworkInformation()
        {
            // Get current Internet Connection Profile.
            ConnectionProfile internetConnectionProfile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
           
            // Check the connection details.
            if (internetConnectionProfile.NetworkAdapter.IanaInterfaceType != IANA_INTERFACE_TYPE_WIFI)
            {
                // Connection is not a Wi-Fi connection. 
                if (internetConnectionProfile.GetConnectionCost().Roaming)
                {
                    // User is roaming. Don't send data out.
                    m_bDoNotSendData = true;
                }

                if (internetConnectionProfile.GetConnectionCost().ApproachingDataLimit)
                {
                    // User is approaching data limit. Send low-resolution images.
                    m_bSendLowResolutionImage = true;
                }

                if (internetConnectionProfile.GetConnectionCost().OverDataLimit)
                {
                    // User is over data limit. Don't send data out.
                    m_bDoNotSendData = true;
                }
            }
            else
            {   
                //Connection is a Wi-Fi connection. Data restrictions are not necessary.                        
                m_bDoNotSendData = false;
                m_bSendLowResolutionImage = false;
            }

            // Optionally, report the current values in a TextBox control.
            string cost = string.Empty;
            switch (internetConnectionProfile.GetConnectionCost().NetworkCostType)
            {
                case NetworkCostType.Unrestricted:
                    cost += "Cost: Unrestricted";
                    break;
                case NetworkCostType.Fixed:
                    cost += "Cost: Fixed";
                    break;
                case NetworkCostType.Variable:
                    cost += "Cost: Variable";
                    break;
                case NetworkCostType.Unknown:
                    cost += "Cost: Unknown";
                    break;
                default:
                    cost += "Cost: Error";
                    break;
            }
            cost += "\n";
            cost += "Roaming: " + internetConnectionProfile.GetConnectionCost().Roaming + "\n";
            cost += "Over Data Limit: " + internetConnectionProfile.GetConnectionCost().OverDataLimit + "\n";
            cost += "Approaching Data Limit : " + internetConnectionProfile.GetConnectionCost().ApproachingDataLimit + "\n";

            NetworkStatus.Text = cost;
        }

        async void OnNetworkStatusChange(object sender)
        {
            UpdateNetworkInformation();
        }


    }
}

表示:
© 2014 Microsoft