情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のデバイス状態

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

DeviceStatus クラスを使用して、デバイスの合計メモリ、デバイスのハードウェア バージョン、物理キーボードが展開されているかどうかなどのデバイスに関するステータス情報を判断できます。さらに、特定のプロパティが変更された時点で、アプリに通知するいくつかのイベントを登録することができます。

Windows Phone OS 7.0 では、DeviceExtendedProperties クラスを使用してデバイス固有のプロパティを照会していました。それより新しいすべてのバージョンでは、DeviceExtendedProperties クラスの使用は推奨されていません。代わりに、新しい DeviceStatus クラスを使用する必要があります。ただし、必要に応じて、使用が推奨されていない DeviceExtendedProperties のプロパティをまだ使用できます。

重要:重要:

このクラスを使用する方法のコード例については、「デバイス ステータスのサンプル」および「Windows Phone 8 の DeviceStatus クラスを使用する方法」を参照してください。

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

  • 一般的なデバイス情報

    DeviceStatus プロパティを照会することによって、合計メモリ容量、ハードウェア バージョン、デバイスの製造元名など、デバイスに関する情報を取得できます。

  • ロック画面の外部で実行されるアプリ

    旅行者が日時を表示するために使用する単純な目覚まし時計アプリなど、特定の種類のアプリは、ユーザーの便宜のためにロック画面の外部で実行されます。ユーザーにアクセス許可を求めることと組み合わせて、PowerSource API と PowerSourceChanged イベントを使用して、電話がいつ外部電源に接続されたかを知ることができます。

  • キーボードの有無

    アプリでは、ハードウェア キーボードが使用できるかどうかに応じて、横モードと縦モードのどちらをサポートするかを選択できます。このようなアプリでは、IsKeyboardPresent プロパティ、IsKeyboardDeployed プロパティ、および KeyboardDeployedChanged イベントを使用できます。

  • メモリ使用量の監視

    アプリを開発するときに、ApplicationCurrentMemoryUsage プロパティと ApplicationPeakMemoryUsage プロパティを使用してメモリ使用量を監視したり、DeviceTotalMemory プロパティと ApplicationMemoryUsageLimit プロパティを使用してデバイスおよびアプリのメモリ制限を特定したりすることができます。極端に短い間隔でアプリのメモリ使用量をチェックする必要はありません。ピークのメモリ使用量をときどきチェックするだけで十分です。「Windows Phone の技術的な認定要件」のセクション 5.2 に記載されているように、ピークのメモリ使用量が許容可能なしきい値を超えていると判明した場合は、問題の診断に役立てるため、メモリ使用量をより精密に監視する必要があります。

    アプリが大量のメモリを消費している場合は、ページやユーザー コントロールなど、アプリ内の主要なオブジェクトのインスタンス カウントを追跡します。終了処理が行われないインスタンスが予想以上に多い場合、これらのインスタンスが解放されない原因を調査する必要があります。

  • アプリでデバイスの生のステータス情報をユーザーに提示したり、デバイス上でデバイスのステータス情報を動的に解析したり処理することは避けてください。DeviceStatus API の使用法として推奨できるのは、統計データまたは使用状況データを生成する目的で、生のデバイス ステータス情報を Web サービスに送信するようなケースです。DeviceName プロパティを使用してデバイスを識別し、そのデバイスに固有の既知のバグを軽減することも可能です。

次の例は、アプリのメモリ使用量を監視する方法の 1 つです。10 秒ごとにアプリのメモリ使用量を表示するタイマーを設定します。

public partial class MainPage : PhoneApplicationPage
    {
        DispatcherTimer timer;

        // Constructor
        public MainPage()
        {
            InitializeComponent();
            timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0,0,10);
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            try
            {
                // These are TextBlock controls that are created in the page’s XAML file.      
                MemoryTextBlock.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage.ToString();
                PeakMemoryTextBlock.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationPeakMemoryUsage.ToString();
            }
            catch (Exception ex)
            {
                MemoryTextBlock.Text = ex.Message;
            }
        }
    }

表示: